这种问题论坛尚明有很多了,你可以找一下,再给你解释一下 String s = "hello";//变量在constant pool
String s1 = "hel";//变量在constant pool
String s2 = "lo";//变量\在constant pool
System.out.println(s == s1 +s2);//(s1 +s2) 在 heap(栈)里面,
System.out.println(s =="hel"+"lo" );//"hel"+"lo" 在constant pool
String s1 = "hel";//变量在constant pool
String s2 = "lo";//变量\在constant pool
System.out.println(s == s1 +s2);//(s1 +s2) 在 heap(栈)里面,
System.out.println(s =="hel"+"lo" );//"hel"+"lo" 在constant pool
可以先看例子,再结合注释理解一下
上面的链接给的不是很准确,这个是准确连接,可以直接看下面的几个例子,结合注释理解
String ss = s1 + s2;
System.out.println(s == ss);此时s和ss指向不同内存地址,字符串用==比较是比较对象的内存地址是否一致,返回false第二个等价于
String sss = "hel"+"lo";
System.out.println(s == sss);
sss从字符串池查找hel 和 lo,有不开辟新的内存空间,使用已经有的,即sss最终指向s,==判断内存地址,相同即返回true