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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© HPU--spring87 中级黑马   /  2014-7-25 21:45  /  2112 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

关于==和equals()的区别?除了==比较的是栈,equals()比较的是堆里面的内容,还有什么区别?主要是覆写equals()方法这点,搞不懂。

评分

参与人数 1技术分 +1 收起 理由
Doraemon + 1

查看全部评分

10 个回复

倒序浏览
本帖最后由 单线程xia 于 2014-7-25 22:00 编辑

镇坛神题
在Object里的equals() 本身就是返回的是地址是否相同的布尔值,而在继承自根基类的其他类中的equals()方法,要看是否override了这个方法,是怎么复写的,不然不能说这两个返回的是否是地址或者内容
其他类中,有的override了Object的equals()方法,是因为Object类的该方法不能满足自己的需求了,所以要复写

不知我这么叙述理解了没,没有的话继续回帖问  。。。同是菜鸟,互相帮忙
回复 使用道具 举报 1 0
==是比较地址值是否相同,而equals()在Object中底层调用的也是==比较也是地址值,而在String类中equals比较字符串是否相同
回复 使用道具 举报
1、==在基本数据类型比较时比较的是值,在引用类型比较的是内存地址。
2、equals()是object的一个方法,也就是说,所有类都具有这个方法,因为object是所有类的根类。
在objcet当中的equals()比较的也是内存地址,这里特别注意的是:String覆写的equals()方法则比较的是字符串内容是否相同。
举个例子;
String str1 = “hello”;
String str2 =  "hello";
String str3 = new String ("hello");
String str4 = new String ("hello");
--------------------------------------------
str1==str2?true
str1==str3?false
str3==str4?false
str3.equals(str4)?true
-------------------------------------------------
"hello"创建一个字符串对象的时候,那么首先JVM在字符串常量池中检测是否已经存在了该字符串。如果存在,那么直接返回字符串常量池中该字符串的内存地址。如果不存在,那么现在字符串常量池中创建该字符串的对象,然后返回该字符串对象的内存地址。

new String("hello")方式创建字符串的时候,那么jvm首先也会在字符串常量池中检测是否已经存在了"hello"字符串,如果不存在,那么直接在字符串常量池中创建该对象,而且还会去到堆内存中创建该字符串对象,把字符串常量池中字符串对象的内容拷贝过去,并且把堆内存中字符串对象内存地址返回。如果字符串常量池中已经存在了指定的字符串,那么不会在字符串常量池中再创建,但是也去到堆内存中创建一个字符串对象,并且把字符串常量池中的字符串内容拷贝过去。------------------------------------------------------------------------
而通过String的equals()方法就可以知道是通过把字符串转换成字符数组,然后挨个挨个比较值是否相同,相同则返回true,不相同则返回false

评分

参与人数 1技术分 +1 收起 理由
Doraemon + 1

查看全部评分

回复 使用道具 举报 1 0
回复 使用道具 举报
长知识了!
回复 使用道具 举报
wisely 中级黑马 2014-7-25 23:29:36
7#
zippo 发表于 2014-7-25 22:27
1、==在基本数据类型比较时比较的是值,在引用类型比较的是内存地址。
2、equals()是object的一个方法,也 ...

第一条很重要,基本数据类型,boolean也可以比较。
回复 使用道具 举报
zippo 发表于 2014-7-25 22:27
1、==在基本数据类型比较时比较的是值,在引用类型比较的是内存地址。
2、equals()是object的一个方法,也 ...

大神,终于搞懂了:lol
回复 使用道具 举报
wisely 发表于 2014-7-25 23:29
第一条很重要,基本数据类型,boolean也可以比较。

:lol,,,,,,
回复 使用道具 举报
小乖乖灬浩歌 来自手机 中级黑马 2014-7-26 21:20:27
10#
zippo 发表于 2014-7-25 22:27
1、==在基本数据类型比较时比较的是值,在引用类型比较的是内存地址。
2、equals()是object的一个方法,也 ...

这个哥们说的很详细了
回复 使用道具 举报
zippo 中级黑马 2014-7-26 22:40:34
11#
小乖乖灬浩歌 发表于 2014-7-26 21:20
这个哥们说的很详细了

谢谢赞赏,土豪求助攻。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马