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

Strings1=newString("amit");Strings2=s1.replace('m','r');Strings3="arit";Strings4="ari... 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才对呀。
展开
 我来答
科特曜U
2015-07-04 · TA获得超过2334个赞
知道大有可为答主
回答量:1052
采纳率:50%
帮助的人:747万
展开全部
JAVA里,String是一个类,你用==比较的话,如果不是同一个对象,就会返回false

S2的声明方式,相当于重新创建了一个String对象
变量S3和S4的声明方式,都指向堆内存中同一个String对象,所以用S2和S3比较返回的是false,S3和S4比较返回的是true
追问
完蛋,我不知道你们谁说的是正确的,都挺有道理的。
追答
都是对的,表达方式不一样而已,要搞清楚这个问题研究下==和equals 方法的区别就知道了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
施弘阔0dp
推荐于2017-10-06 · TA获得超过289个赞
知道小有建树答主
回答量:519
采纳率:0%
帮助的人:315万
展开全部
这方面涉及到基本类型和字符串的常量池,s3 == s4两个变量引用的是常量池里同一个内存地址,所以相等
追问
完蛋,我不知道你们谁说的是正确的,都挺有道理的。
追答
==。这个对于基本类型来说。只比较值是否相等。而对于变量来说。是比较内存地址是否相等。因为s3和s4引用常量池同一个常量“arit”,所以s3==s4.即它们的地址相等、而s2==s3是false是因为s2是一个String的对象,s2有自己的独有的内存空间地址,所以s2==s3的地址是不同的。为false。懂了么?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2015-07-04
展开全部
==比较的内存地址,要比值用s3.Equals(s2)
追问
完蛋,我不知道你们谁说的是正确的,都挺有道理的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式