有人在代码及其输出上投掷吗?
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);
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
true
false
false
false
Run Code Online (Sandbox Code Playgroud)
据我所知,这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);
Run Code Online (Sandbox Code Playgroud)
它很容易解释.所以它是幕后的编译器,为你做了很多工作.
当我们连接字符串文字时,它用一个文字替换它,当我们使用连接变量时,它使用StringBuilder.