“equals“和“==“的区别

Object类 equals方法实际是调用的 "=="方法,即比较Object对象的hashCode值

public boolean equals(Object obj) {
        return (this == obj);
    }

如果是基本数据类型,那么"=="比较的就是值,如果是引用类型,那么引用类型的对象内存放的值实际上是引用的地址,所以比较的就是地址

所以在定义一个类的时候,如果需要比较两个该类对象是否相等,需要重写equals 和 hashCode方法,否则会默认调用父类的构造方法,这就与我们比较两个对象值的初衷不符

为什么说重写equals方法就要重写hashCode方法

同时使用哈希表的话,就能快速定位到对象的大概存储位置,并且在定位到大概存储位置后,后续比较过程中,如果两个对象的hashCode不相同,也不再需要调用equals()方法,从而大大减少了equals()比较次数。所以从程序实现原理上来讲的话,既需要equals()方法,也需要hashCode()方法。那么既然重写了equals(),那么也要重写hashCode()方法,以保证两者之间的配合关系。


1、equals方法,一般来讲,我们希望的是比较对象的内容,但是如果没有重写Object的equals方法,比较的仍然是地址
2、在Object类中,equals和hashCode方法是具有相同的表现(equals返回true,hashCode一定相等)


因为hashCode方法是基于哈希表实现的,可能会存在冲突问题(多个对象映射到同一个位置,即hashCode值相同)


3、equals返回true,hashCode一定相等
4、equals返回false,hashCode不一定不相等,可能两个对象地址不同,但是映射到了一个索引。可能相同
5、如果hashCode相等,equals可能返回false
6、如果hashCode不相等,equals一定返回false

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值