Java的String拼接问题
代码片段:String s1 = "hello";
String s2 = "hello";
System.out.println(s1 == s2);//打印为 true;
String s3 = s1 + s2;
String s4 = s1 + s2;
System.out.println(s3 == s4);//打印为 false;
请问为什么 “System.out.println(s3 == s4);//打印为 false; ” ?我觉得都是字符串池里面的对象啊。 ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
==比较的是2个对象的地址,而equals比较的是2个对象的内容。
显然,当equals为true时,==不一定为true; String比较特殊。直接赋值,字符串内容是在栈上。如果是构造出来的,是在堆上。
例如,String s1 = new String("hello")和String s2 = new String("hello"),s1==s2为false。
你例子里的s3和s4,实际是在堆上的空间,引用自然不等。 :victory:讲的挺好的,很不错,学习了
页:
[1]