0

问题一:

在这段代码中,是只创建了一个字符串对象,还是创建了一个字符串对象和 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"); 
4

1 回答 1

0

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

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

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

于 2013-02-14T20:06:00.717 回答