黑马程序员技术交流社区

标题: “euqals"和“==”区别 [打印本页]

作者: 蓦然回首3Y    时间: 2015-7-8 08:16
标题: “euqals"和“==”区别
String s1 = new String("hello");
                        String s2 = new String("hello");
                        System.out.println(s1 == s2);// false
                        System.out.println(s1.equals(s2));// true
“euqals"和“==”的区别是什么呢?

作者: linjian931219    时间: 2015-7-8 08:17
关注答案的
作者: 紫夜灵魂    时间: 2015-7-8 08:22
== 比较的是 变量地址
equals 比较的是字符串的值是否相等
作者: zhuoxiuwu    时间: 2015-7-8 08:35
== 比较的是内存中的地址是否相同
equals 比较的是两个指向的里面的内容是否相同
作者: fmi110    时间: 2015-7-8 09:20
== 比较的是                               引用对象的内存地址
String类的equals方法比较的是       引用对象的内存地址存储的值

s1 s2引用了不同的对象(因为是new出来的),所以对象地址肯定不同 为 false
equal比较对象的值  她们都是“hello"   所以为true
作者: Vampire..    时间: 2015-7-8 13:15
Object类中两个意思相同,都是比较地址。但equals方法在String类中重写,就变成了比较值
作者: 孙嘉亮    时间: 2015-7-8 13:43
两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己的判断方式判断是否相同。例如String就重写了equals方法
作者: 孙嘉亮    时间: 2015-7-8 13:54
fmi110 发表于 2015-7-8 09:20
== 比较的是                               引用对象的内存地址
String类的equals方法比较的是       引 ...

不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己的判断方式判断是否相同。例如String就重写了equals方法,比较相同的字符串时返回true
作者: 孙嘉亮    时间: 2015-7-8 13:55
紫夜灵魂 发表于 2015-7-8 08:22
== 比较的是 变量地址
equals 比较的是字符串的值是否相等

怎么那么多人都以为equals比较的是内容。。。。
作者: 杰可可    时间: 2015-7-8 13:56
楼主去看这篇技术文档吧!看完了这些都不是问题了:http://pan.baidu.com/s/1qWp6xBY
作者: 孙嘉亮    时间: 2015-7-8 13:57
zhangkai986745 发表于 2015-7-8 09:49
一个是比较的是值,一个比较的是内存地址

不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己的判断方式判断是否相同。例如String就重写了equals方法,比较相同的字符串时返回true
作者: 孙嘉亮    时间: 2015-7-8 13:58
zhuoxiuwu 发表于 2015-7-8 08:35
== 比较的是内存中的地址是否相同
equals 比较的是两个指向的里面的内容是否相同 ...

不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己的判断方式判断是否相同。例如String就重写了equals方法,比较相同的字符串时返回true
作者: zhuoxiuwu    时间: 2015-7-8 14:09
孙嘉亮 发表于 2015-7-8 13:58
不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己 ...

嗯,你是对的 我的说法并不正确
作者: leesang    时间: 2015-7-8 14:11
学习了,
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己的判断方式判断是否相同。
作者: zhhrai    时间: 2015-7-8 14:15
本帖最后由 zhhrai 于 2015-7-8 14:17 编辑

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

equals
    只能比较引用类型 默认比较的地址值,
    可以通过重写Object的equals()可以实现不同于==的比较.

作者: hwy801207    时间: 2015-7-8 14:16
equals  比较的是内容, == 可以比较是否引用同一个对象
作者: 思考。。。    时间: 2015-7-8 14:19
equals比较的是两个指向的内容是否相等,而==比较的是内存中的地址值是否相等
作者: zhhrai    时间: 2015-7-8 14:19
hwy801207 发表于 2015-7-8 14:16
equals  比较的是内容, == 可以比较是否引用同一个对象

那是因为重写了Object的equals()方法,才比较的是内容.String Integer 等等类都是重写了,才比较的是内容.
作者: fmi110    时间: 2015-7-8 15:37
本帖最后由 fmi110 于 2015-7-8 15:59 编辑
孙嘉亮 发表于 2015-7-8 13:54
不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己 ...

“相同的字符串”就是内存地址存储的值  我觉的我的表述没问题啊???
作者: fmi110    时间: 2015-7-8 15:57
孙嘉亮 发表于 2015-7-8 13:57
不对不对。两个判断依据的都是地址值。
不同点在于 == 可以比较基本类型;
而equals可以被重写,用你自己 ...

"判断依据是地址值" 这个怎么理解啊?
假设s1引用的对象在堆中的地址是  0x0020
      s2引用的对象在堆中的地址是  0x0030
比较 s1 == s2  因为堆栈地址不相同所以是false   这个是以地址为依据的可以理解
但是   s1.equals(s2) 这个怎么解释 啊?
我是这样理解的:  堆地址  0x0020  存的是     "hello"    (地址储存的值)
                          堆地址  0x0030  存的也是  "hello"
String类中重写了方法equals,实际不是比较堆的内存地址,而是比较 地址内存的内容是否相同,也就是字符串是否相同。
作者: jake_liu    时间: 2015-7-8 16:29
这个问题,发现好多人提。。论坛很多资料解决这个问题的
作者: continue    时间: 2015-7-8 17:23
只是看看,学习学习
作者: Nemo    时间: 2015-7-8 18:02
==比较地址,equals比较值
作者: maizi1912    时间: 2015-7-8 18:08
euals好像可以比较对象  ==只能比较值吧
作者: 陈建民1    时间: 2015-7-8 18:16
这个我也不太懂
作者: q953655369    时间: 2015-7-8 21:30
== 是比较的地址值   euqals 是本值
作者: 星痕-凌    时间: 2015-7-8 21:33
同学习!
作者: 胡家兵    时间: 2015-7-8 21:37
== 比较的是内存中的地址是否相同
equals 比较的是两个指向的里面的内容是否相同
终于知到了
作者: 双元王志超    时间: 2015-7-8 21:44
一个是比较值,一个是比较值和地址
作者: 鲁枝权双元    时间: 2015-7-8 21:47
euqals 就是比较两个值和地址值
==就是比较值
作者: 孙嘉亮    时间: 2015-7-8 22:16
fmi110 发表于 2015-7-8 15:37
“相同的字符串”就是内存地址存储的值  我觉的我的表述没问题啊???  ...

我的意思是说,equals默认比较地址。除非被重写,才能按照重写的方式去比较。
跟地址指向的对象没关系。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2