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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 蓦然回首3Y 中级黑马   /  2015-7-8 08:16  /  878 人查看  /  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 个回复

倒序浏览
linjian931219 来自手机 中级黑马 2015-7-8 08:17:13
沙发
关注答案的
回复 使用道具 举报
== 比较的是 变量地址
equals 比较的是字符串的值是否相等
回复 使用道具 举报
== 比较的是内存中的地址是否相同
equals 比较的是两个指向的里面的内容是否相同
回复 使用道具 举报
== 比较的是                               引用对象的内存地址
String类的equals方法比较的是       引用对象的内存地址存储的值

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

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

怎么那么多人都以为equals比较的是内容。。。。
回复 使用道具 举报
楼主去看这篇技术文档吧!看完了这些都不是问题了:http://pan.baidu.com/s/1qWp6xBY
回复 使用道具 举报
zhangkai986745 发表于 2015-7-8 09:49
一个是比较的是值,一个比较的是内存地址

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

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

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

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

equals
    只能比较引用类型 默认比较的地址值,
    可以通过重写Object的equals()可以实现不同于==的比较.
回复 使用道具 举报
equals  比较的是内容, == 可以比较是否引用同一个对象
回复 使用道具 举报
equals比较的是两个指向的内容是否相等,而==比较的是内存中的地址值是否相等
回复 使用道具 举报
hwy801207 发表于 2015-7-8 14:16
equals  比较的是内容, == 可以比较是否引用同一个对象

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

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

"判断依据是地址值" 这个怎么理解啊?
假设s1引用的对象在堆中的地址是  0x0020
      s2引用的对象在堆中的地址是  0x0030
比较 s1 == s2  因为堆栈地址不相同所以是false   这个是以地址为依据的可以理解
但是   s1.equals(s2) 这个怎么解释 啊?
我是这样理解的:  堆地址  0x0020  存的是     "hello"    (地址储存的值)
                          堆地址  0x0030  存的也是  "hello"
String类中重写了方法equals,实际不是比较堆的内存地址,而是比较 地址内存的内容是否相同,也就是字符串是否相同。
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马