public static void main(String[] args){
String s1 = "abc";
String s2 = "ab";
String s3 = s2 + "c";
System.out.println(s1 == s3);
}
结果为:false
在编译阶段,s2是变量,在运行时才会分配变量空间的地址指向"ab",在运算时得出s3是"abc",指向的是堆内存,而s1指向的是堆内存中的字符串常量池
public static void main(String[] args){
String s1 = "abc";
String s2 = "a"+"b"+"c";
System.out.println(s1 == s2);
}
结果为:true
如图,java存在编译优化机制,编译成class文件时 String s2 = "a"+"b"+"c" 变成了 String s2 = "abc",运行时提升了性能,不需要做运算了