字符串拼接如果是变量相加,先开空间,再进行拼接。
字符串如果是常量相加,是先加,然后在常量池找,如果有就直接返回,否则,就创建。
public class StringDemo {
public static void main(String[] args) {
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == s1 + s2); // false
System.out.println(s3.equals((s1 + s2))); // true
System.out.println(s3 == "hello" + "world"); //常量相加,在常量池中寻找,因为有helloworld,最后返回的是常量池中的引用
System.out.println(s3.equals("hello" + "world")); // true
//以上内容编译后内容
/*
String s1 = "hello";
String s2 = "world";
String s3 = "helloworld";
System.out.println(s3 == (new StringBuilder(String.valueOf(s1))).append(s2).toString());
System.out.println(s3.equals((new StringBuilder(String.valueOf(s1))).append(s2).toString()));
System.out.println(s3 == "helloworld");
System.out.println(s3.equals("helloworld"));
*/
}
}