equals()和hashcode()

equals()和hashcode()都是总父类object中的方法,所有类都默认继承了object类,但是在object中的equals和hashcode()的实现都不尽如意,所以一般使用这俩个方法都需要重写.

object类中的equals()方法用的比较方法是”==”,那么就是说比较的地址,但让,如果你用equals就是用作数值的比较,那不必说了,如果不是,那么object的equals方法就不能这样用了.同样,hashcode()方法,是求调用者的hashcode值,其中怎么计算不说了,那么,如果用父类的hashcode(),比较的也是地址.

这里需要注明的是:我嫩平时用的arrays工具类,用String的equals’方法已经被重写过了,看过源码的人肯定知道,equals方法用了hashcode方法.就是说重写之后的hashcode方法对于同一对象求出的值永远是一样(这里不包括引用类型的引用改变),可以说同一个东西的哈希值一样,一样的哈希值就是同一个对象.

说下重写equals方法的思路:
1.判断是否是一个实例
2.判断是否是空
3.判断是否是一个类型
4.判断类中的属性是否相等.

public boolean equals(Object obj) { 
// 第一步先判断是否同一个实例 
if (this == obj) { 
    return true; 
} 
// 第二步判断要比较的对象是否为null 
if (obj == null) { 
    return false; 
} 
// 第三步判断是否同一个类型 
if (obj instanceof A) { 
    // 第四步类型相同,先转换成为同一个类型 
    A a = (A) obj; 
// 第五步然后进行对象属性值的比较 
if (this.id == a.id && this.name.equals(a.name)) { 
    return true; 
} else { 
    return false;
 } } else { 
    return false; 
} }

其实正常在第五步的时候,需要用hashcode码去判断,这样更加精确,那么就是说,hashcode()必须重写,如果不重写,必然导致判断不准确.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值