如果使用字符串文字传递StringBuilder的构造函数,则创建了多少个对象

时间:2013-02-14 19:47:09

标签: concatenation stringbuilder

问题1:

在这段代码中,是否只创建了一个字符串对象,或者一个字符串对象以及5个字符串文字("abc""xyz""abcxyz""123""abcxyz123")?

StringBuilder s1 = new StringBuilder("abc"+"xyz"+"123");  

问题2:

在另一种情况下,是否只创建了一个字符串对象?

 StringBuilder s2 = new StringBuilder();  
       s2.append("abc");  
       s2.append("xyz");  
       s2.append("123"); 

1 个答案:

答案 0 :(得分:0)

由于字符串是不可变的,当您使用带有两个字符串的+运算符时,可以使用串联创建一个新的字符串对象。 string pool用作优化,因此如果它包含字符串,则返回引用而不是创建新引用。

intern()方法将String对象添加到池中(如果它尚未包含它)。 字符串文字总是实习,因此在这两个问题中,您创建相同数量的引用并将它们添加到字符串池(在构造函数中使用或作为参数)。

请注意,创建字符串对象会有所不同:当我们使用s = new String("foo");时,我们正在创建一个新引用,因此在这种情况下,字符串对象将不会在字符串池中,直到您调用{{ 1}}。