Java中equals和==的区别?为什么重写equals方法后,一定要重写hashCode方法?
2024-09-20 09:44:09
首先明确一点,equals是方法,==是操作符。
1. 如果比较的是基本数据类型:
只讨论==,因为equals是不存在的,因为java中基本数据类型不能调用method的。
2. 如果比较的是引用类型:
==:比较两个引用是不是指向同一个对象实例,即相同的地址。
equals:equals方法是Object类的方法,默认是直接调用==来实现。如果没有被重写,那么调用equals与==没有区别。
但是,在一些类库中这个方法被覆盖了,比如八大基本数据类型的包装类和String类,它们的equals方法比较的是值是否相同,此时的equals就与==有区别了。
我们自己也可以根据需要,来重写equals方法。
注意:
hashCode方法也是可以来比较两个对象是否相等,但是很少直接使用。hashCode方法返回的是一个int值,可以看做是一个对象的唯一编码,如果两个对象的hashCode值相同,我们应该认为这两个对象是同一个对象。
所以,我们在对equals方法重写之后,建议一定要对hashCode方法重写,以保证相同的对象返回相同的hash值,不同的对象返回不同的hash值。
最新文章
- 创建dll教程
- <;概要>;
- Oracle事务之一:锁和隔离
- SQL调优之排名优化
- wireshark添加ip.id字段
- java 读取文件的字节数组
- 找到个好的讲PYTHON FILE IO的文档,收藏
- [RxJS] Combination operators: concat, startWith
- Java 单例总结
- c# Activex开发之HelloWorld
- Ubuntu 划词翻译
- Kaggle初学者五步入门指南,七大诀窍助你享受竞赛
- JDK1.7 ConcurrentHashMap--解决高并发下的HashMap使用问题
- [20170623]利用传输表空间恢复数据库2.txt
- eMMC ext4综述【转】
- courator - create
- Android:相机适配及图片处理的一些问题
- cacti监控jvm
- WPF绑定之索引器值变化通知
- Windows命令-route