lanlovehua 发表于 2015-11-27 16:45

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; ” ?我觉得都是字符串池里面的对象啊。

baopbird2005 发表于 2015-12-04 11:33

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。
    equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。
    ==比较的是2个对象的地址,而equals比较的是2个对象的内容。
    显然,当equals为true时,==不一定为true;

xphh2008 发表于 2015-12-13 10:31

String比较特殊。直接赋值,字符串内容是在栈上。如果是构造出来的,是在堆上。

例如,String s1 = new String("hello")和String s2 = new String("hello"),s1==s2为false。

你例子里的s3和s4,实际是在堆上的空间,引用自然不等。

贾肉肉and小泽泽 发表于 2015-12-15 09:27

:victory:讲的挺好的,很不错,学习了
页: [1]
查看完整版本: Java的String拼接问题