有人可以正确处理代码及其输出吗?
public class HelloWorld {
public static void main(String[] args) {
String s1 = "Hello World";
String s6 = "Hello" + " World";
String s7 = "Hello";
String s8 = " World";
String s9 = s7 + s8;
String s10 = s7 + " World";
System.out.println(s1==s6);
System.out.println(s1==s9);
System.out.println(s1==s10);
System.out.println(s9==s10);
}
}
输出:
true
false
false
false
我理解s1
是在字符串常量池中创建的。我想知道如何使用连接运算符创建 s6
、s9
和 s10
。
最佳答案
编译时做了很多优化。因此,如果您在编译后查看反编译代码,您会看到:
String s1 = "Hello World";
String s6 = "Hello World";
String s7 = "Hello";
String s8 = " World";
String s9 = (new StringBuilder(String.valueOf(s7))).append(s8).toString();
String s10 = (new StringBuilder(String.valueOf(s7))).append(" World").toString();
System.out.println(s1 == s6);
System.out.println(s1 == s9);
System.out.println(s1 == s10);
System.out.println(s9 == s10);
而且它很容易解释。所以它是幕后的编译器,它为您做了很多工作。
当我们连接字符串文字时,它用单个文字替换它,当我们使用变量连接时,它使用 StringBuilder。
关于java - 字符串连接运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16292133/