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

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

String s1 = new String("hello");
                        String s2 = new String("hello");
                        System.out.println(s1 == s2);// false
                        System.out.println(s1.equals(s2));// true
“euqals"和“==”的区别是什么呢?

30 个回复

正序浏览
fmi110 发表于 2015-7-8 15:37
“相同的字符串”就是内存地址存储的值  我觉的我的表述没问题啊???  ...

我的意思是说,equals默认比较地址。除非被重写,才能按照重写的方式去比较。
跟地址指向的对象没关系。
回复 使用道具 举报
euqals 就是比较两个值和地址值
==就是比较值
回复 使用道具 举报
一个是比较值,一个是比较值和地址
回复 使用道具 举报
== 比较的是内存中的地址是否相同
equals 比较的是两个指向的里面的内容是否相同
终于知到了
回复 使用道具 举报
同学习!
回复 使用道具 举报
== 是比较的地址值   euqals 是本值
回复 使用道具 举报
这个我也不太懂
回复 使用道具 举报
euals好像可以比较对象  ==只能比较值吧
回复 使用道具 举报
==比较地址,equals比较值
回复 使用道具 举报
只是看看,学习学习
回复 使用道具 举报
这个问题,发现好多人提。。论坛很多资料解决这个问题的
回复 使用道具 举报
孙嘉亮 发表于 2015-7-8 13:57
不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己 ...

"判断依据是地址值" 这个怎么理解啊?
假设s1引用的对象在堆中的地址是  0x0020
      s2引用的对象在堆中的地址是  0x0030
比较 s1 == s2  因为堆栈地址不相同所以是false   这个是以地址为依据的可以理解
但是   s1.equals(s2) 这个怎么解释 啊?
我是这样理解的:  堆地址  0x0020  存的是     "hello"    (地址储存的值)
                          堆地址  0x0030  存的也是  "hello"
String类中重写了方法equals,实际不是比较堆的内存地址,而是比较 地址内存的内容是否相同,也就是字符串是否相同。
回复 使用道具 举报
本帖最后由 fmi110 于 2015-7-8 15:59 编辑
孙嘉亮 发表于 2015-7-8 13:54
不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己 ...

“相同的字符串”就是内存地址存储的值  我觉的我的表述没问题啊???
回复 使用道具 举报
hwy801207 发表于 2015-7-8 14:16
equals  比较的是内容, == 可以比较是否引用同一个对象

那是因为重写了Object的equals()方法,才比较的是内容.String Integer 等等类都是重写了,才比较的是内容.
回复 使用道具 举报
equals比较的是两个指向的内容是否相等,而==比较的是内存中的地址值是否相等
回复 使用道具 举报
equals  比较的是内容, == 可以比较是否引用同一个对象
回复 使用道具 举报
本帖最后由 zhhrai 于 2015-7-8 14:17 编辑

==
    可以比较基础类型 比较的是值是否相同
    可以比较引用类型 比较的是地址值是否相同

equals
    只能比较引用类型 默认比较的地址值,
    可以通过重写Object的equals()可以实现不同于==的比较.
回复 使用道具 举报
学习了,
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己的判断方式判断是否相同。
回复 使用道具 举报
孙嘉亮 发表于 2015-7-8 13:58
不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己 ...

嗯,你是对的 我的说法并不正确
回复 使用道具 举报
zhuoxiuwu 发表于 2015-7-8 08:35
== 比较的是内存中的地址是否相同
equals 比较的是两个指向的里面的内容是否相同 ...

不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己的判断方式判断是否相同。例如String就重写了equals方法,比较相同的字符串时返回true
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马