java字符串比较,为什么打印的数据一样,对比值却不一样?

String s1 = new String("amit");
String s2 = s1.replace('m','r');
String s3 = "arit";
String s4 = "arit";
System.out.println(s2);
System.out.println(s3);
System.out.println(s2 == s3);
System.out.println(s3 == s4);

运行结果是:
arit
arit
false
true
应该两个都是true才对呀。

第1个回答  2015-07-04
JAVA里,String是一个类,你用==比较的话,如果不是同一个对象,就会返回false

S2的声明方式,相当于重新创建了一个String对象
变量S3和S4的声明方式,都指向堆内存中同一个String对象,所以用S2和S3比较返回的是false,S3和S4比较返回的是true追问

完蛋,我不知道你们谁说的是正确的,都挺有道理的。

追答

都是对的,表达方式不一样而已,要搞清楚这个问题研究下==和equals 方法的区别就知道了

本回答被网友采纳
第2个回答  推荐于2017-10-06
这方面涉及到基本类型和字符串的常量池,s3 == s4两个变量引用的是常量池里同一个内存地址,所以相等追问

完蛋,我不知道你们谁说的是正确的,都挺有道理的。

追答

==。这个对于基本类型来说。只比较值是否相等。而对于变量来说。是比较内存地址是否相等。因为s3和s4引用常量池同一个常量“arit”,所以s3==s4.即它们的地址相等、而s2==s3是false是因为s2是一个String的对象,s2有自己的独有的内存空间地址,所以s2==s3的地址是不同的。为false。懂了么?

本回答被提问者采纳
第3个回答  2015-07-04
==比较的内存地址,要比值用s3.Equals(s2)追问

完蛋,我不知道你们谁说的是正确的,都挺有道理的。

相似回答