我从博客中了解到,在使用+运算符时,Java 内部使用 StringBuilder 来连接字符串。我刚刚进行了测试,并发现一些奇怪的输出。
public class StringDemo {
public static void main(String[] args) {
String a = "Hello World";
String b = "Hello World";
String c = "Hello";
String d = c + " World".intern();
String e = new StringBuilder().append(String.valueOf(c)).append(" World").toString().intern() ;
String f = new StringBuilder(String.valueOf(c)).append(" World").toString().intern();
System.out.println(a == b); // Line 1 Expected output true
System.out.println(a == d); // Line 2 Output is false
System.out.println(a == e); // Line 3 Output is true
System.out.println(a == f); // Line 4 Output is true
}
}
所以我使用+运算符连接两个字符串c和"World",然后使用intern()方法将字符串d移至池中。
据我所知,Java使用StringBuilder,因此现在我使用StringBuilder来连接字符串,并对字符串e和f使用intern()方法。如果两者相等,则两个字符串的地址必须相同,但第2行的输出与第4行和第5行不匹配。
感谢您宝贵的反馈。