我从博客中读到,当我们使用 + 运算符时,内部java使用StringBuilder来连接String。我只是检查它,发现了一些奇怪的输出。
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 的池中移动String。
根据我的理解,java使用StringBuilder,所以现在我使用StringBuilder连接String并使用intern()方法用于Strings e 和 f 。 因此,如果两个字符串的等效地址和地址必须相同,但第2行的输出与第4行和第4行不匹配。 5。
提前感谢您的宝贵意见。
答案 0 :(得分:10)
+内部如何在JAVA中工作
这是我的帖子,请阅读Compiler version : How String concatenation works in java.
来到你的代码
System.out.println(a == d);
那应该只是false
。
根据您的理解,您期待true
。不,你的理解是错误的。
String d = c + " World".intern();
并且
String d = (c + " World").intern();
在第一行只有"World"
被拘禁而第二行被"Hello World"
被拘禁
执行(c + " World").intern()
后,您会看到输出true
。