==与equals?hashCode与equals?
发表于|更新于|整理归纳
|总字数:627|阅读时长:2分钟|浏览量:
== 与 equals?hashCode 与 equals ?
== :==
是操作符
基本类型:比较值是否相等 (byte,short,char,int,long,float,double,boolean)
引用类型:比较堆内存地址是否相等 (new一个引用类型的对象,会重新分配堆内存空间,使用==比较返回false)
补充:==
运行速度比equals()
快,因为==只是比较引用
equals: equals()
是Object类的一个方法,Java当中所有的类都是继承于Object这个超类。
引用类型:默认情况下,比较内存地址值是否相等
一般重写都是自动生成,比较对象的成员变量值是否相同
hashCode 与 equals ?
equals()性质:
- 自反性(reflexive)。对于任意不为null的引用值x,x.equals(x)一定是true。
- 对称性(symmetric)。对于任意不为null的引用值x和y,当且仅当x.equals(y)是true时,y.equals(x)也是true。
- 传递性(transitive)。对于任意不为null的引用值x、y和z,如果x.equals(y)是true,同时y.equals(z)是true,那么x.equals(z)一定是true。
- 一致性(consistent)。对于任意不为null的引用值x和y,如果用于equals比较的对象信息没有被修改的话,多次调用时x.equals(y)要么一致地返回true要么一致地返回false。
- 非空性。对于任意不为null的引用值x,x.equals(null)返回false。
需要注意的是当equals()方法被override时,hashCode()也要被override。按照一般hashCode()方法的实现来说,相等的对象,它们的hash code一定相等。
hashCode()方法
hashCode()方法给对象返回一个hash code值。
- hashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,hashCode是用来在散列存储结构中确定对象的存储地址的;
- 如果两个对象相同,就是适用于equals(java.lang.Object) 方法,那么这两个对象的hashCode一定要相同;
- 如果对象的equals方法被重写,那么对象的hashCode也尽量重写,并且产生hashCode使用的对象,一定要和equals方法中使用的一致,否则就会违反上面提到的第2点;
- 两个对象的hashCode相同,并不一定表示两个对象就相同,也就是不一定适用于equals(java.lang.Object) 方法,只能够说明这两个对象在散列存储结构中,如Hashtable,他们“存放在同一个篮子里”
补充: 为什么要有hashCode?
文章作者: MUMU
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 blog.wo0ow.com!