打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
==和equals方法的区别是什么?hashCode方法的作用?

先说==:

==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量说对应的内存中所存储的数值是否相等.要比较两个基本数据类型或者两个引用变量是够相等,只用==.

如果一个变量指向的数据是对象类型,那么就涉及了两块内存,对象本身占用一块堆内存,变量也占用一块内存,

例如:Object obj=newObject(); 

obj是一个内存,new Object()是另一个内存.此时变量obj所对应的内存中存储的数值占用的那块内存的首地址.

对于指向对象类型的变量,如果要比较两个变量是否指向同一个对象,就要看这两个变量所对应的内存中的数字是否相等,此时用==操作符来进行比较.

 

再说equals:

它用于比较两个独立对象的内容是否相等,就好比对比两个人长相是否相同,他比较的两个对象是独立的.

例如: String a=new String(“foo”);    String b=new String(“Foo”);

两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中的一个对象,这是两个不同的对象,他们的首地址是不同的,即,ab中存储的数字是不相同的,所以,表达式a==b返回的是false,而这两个对象同的内容是相等的,所以,要用a.equals(b),返回true.

字符串的比较基本上是用equals.

 

额外的一些细节:

如果一个类没有自己定义equals方法,那么它将继承Object类的equals方法,Object类的equals方法的实现代码如下:

Boolean equals(Object o){return this==o;}

这说明,如果一个类没有自己定义equals方法,它默认的equals方法(从Object类继承)就是使用==操作符,也是在比较两个变量指向的对象是否同一个对象,使用equals和==会得到同样的结果.若比较的是独立的对象就总返回false.所以一些情况下,需要覆盖equals方法.

 

然后就是关于hashCode方法.

hashCode和equals都是用来判断2个对象是否相等.但他们区别比较大.

一般来说,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用哪个,就可以判断他们是否相等了,简单的来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是否相等.如有个学生类,属性只有姓名和性别,我们可以认为只要姓名和性别相等,那么就说着2个对象是相等的.

Hashcode方法,一般用户不会去调用,比如在hashmap中,由于ket是不可以重复的,他在判断ket是不是重复的时候就使用了hashcode这个方法,而且也用到了equals方法,这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来说,hashcode相当于是一个对象的编码,就好象文件中的md5,他和equals不同就在于他返回的是int型的.比较起来不直观.我们一般在覆盖equals的同时,也要覆盖hashcode,让他们的逻辑一致.如上述例子,如果姓名和性别相等,那么hashcode的方法也要返回姓名和性别的hashcode值,这样从逻辑上,他们就一致了.

==是物理上的判断是否相等,就是内存上判断.

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
所有类的父类 Java Object
java中Object的默认hashCode方法实现原理
==和equals
java基础Integer与Integer比较
新手必备Java快速扫盲指南
日常使用主力语言 Java 的基础知识整理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服