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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

关于==与equals的区别是什么?求大神解答一下

11 个回复

倒序浏览
equals 方法每个类重写的不一样. 不过我知道你问的意思. 根据你的意思 我来回答:
== :  比较引用类型时,比较的是内存地址.数据类型时是值.
回复 使用道具 举报
equals 方法每个类重写的不一样. 不过我知道你问的意思. 根据你的意思 我来回答:
== :  比较引用类型时,比较的是内存地址.数据类型时是值.
equals: 比较的就是对象的内容了
回复 使用道具 举报
会算命的码农 发表于 2015-4-10 20:05
equals 方法每个类重写的不一样. 不过我知道你问的意思. 根据你的意思 我来回答:
== :  比较引用类型时,比 ...

不全对,equals默认也是比较地址,所以大部分也得重写
回复 使用道具 举报
会算命的码农 发表于 2015-4-10 20:01
equals 方法每个类重写的不一样. 不过我知道你问的意思. 根据你的意思 我来回答:
== :  比较引用类型时,比 ...

谢谢,那么每个对象的内存地址都是其hashCode吗?
回复 使用道具 举报
==:基本数据类型:比较的是值,按照自然排序,也就是编码表的排序。
引用数据类型:比较的是地址值,不是每个对象的地址值都是hashcode,hashcode是由地址值获得的,hashcode只有在存储结构为哈希表的时候才会去生产哈希值,通过哈希值来进行存储排序。
equals:在object类中时,对象的比较是地址值,但是比较地址值是没有意义的,所以在object的子类中一般都会重写equals方法,比较内容会根据子类的需求去重写,从而实现比较。比如String类中的equals方法就是重写了object的equals方法。
回复 使用道具 举报
进来看看,学习学习
回复 使用道具 举报
蜡笔 中级黑马 2015-4-10 22:07:59
8#

大家一起学习
回复 使用道具 举报
蜡笔 发表于 2015-4-10 20:28
谢谢,那么每个对象的内存地址都是其hashCode吗?

不是,哈希码只是一种算法,
回复 使用道具 举报
xlunaer 发表于 2015-4-10 20:23
不全对,equals默认也是比较地址,所以大部分也得重写

我不是说了吗?每个类重写的不都是一样的.我是按照他问的意思给他解答
回复 使用道具 举报
==,比较两个变量的值是否相等,
回复 使用道具 举报
==都是比较地址值,数值类型的也是比较地址值,只不过数值类型数据存放的内存地址和引用数据类型的不太一样,具体实例化对象的equals()方法是覆写根类Object中的equals()方法的,String类的默认改写的是比较内容是否相同,自己定义类默认都是继承根类的equals()方法比较地址值,需要比较什么内容可以自己改写该方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马