A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 蓦然回首3Y   /  2015-7-8 08:16  /  1099 人查看  /  30 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

孙嘉亮 发表于 2015-7-8 13:57
不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己 ...

"判断依据是地址值" 这个怎么理解啊?
假设s1引用的对象在堆中的地址是  0x0020
      s2引用的对象在堆中的地址是  0x0030
比较 s1 == s2  因为堆栈地址不相同所以是false   这个是以地址为依据的可以理解
但是   s1.equals(s2) 这个怎么解释 啊?
我是这样理解的:  堆地址  0x0020  存的是     "hello"    (地址储存的值)
                          堆地址  0x0030  存的也是  "hello"
String类中重写了方法equals,实际不是比较堆的内存地址,而是比较 地址内存的内容是否相同,也就是字符串是否相同。
回复 使用道具 举报
这个问题,发现好多人提。。论坛很多资料解决这个问题的
回复 使用道具 举报
只是看看,学习学习
回复 使用道具 举报
==比较地址,equals比较值
回复 使用道具 举报
euals好像可以比较对象  ==只能比较值吧
回复 使用道具 举报
这个我也不太懂
回复 使用道具 举报
== 是比较的地址值   euqals 是本值
回复 使用道具 举报
同学习!
回复 使用道具 举报
== 比较的是内存中的地址是否相同
equals 比较的是两个指向的里面的内容是否相同
终于知到了
回复 使用道具 举报
一个是比较值,一个是比较值和地址
回复 使用道具 举报
euqals 就是比较两个值和地址值
==就是比较值
回复 使用道具 举报
fmi110 发表于 2015-7-8 15:37
“相同的字符串”就是内存地址存储的值  我觉的我的表述没问题啊???  ...

我的意思是说,equals默认比较地址。除非被重写,才能按照重写的方式去比较。
跟地址指向的对象没关系。
回复 使用道具 举报
12
您需要登录后才可以回帖 登录 | 加入黑马