编写equals()和hashCode()方法需要遵循以下原则:
1. equals()方法:
- 使用instanceof关键字检查传入的对象是否为当前类的实例。
- 检查传入的对象是否为null。
- 检查传入的对象的类型是否与当前对象的类型相同。
- 比较对象的属性是否相等,可以使用Objects.equals()方法来比较属性值。
2. hashCode()方法:
- 选择一种或几种属性来计算哈希值,确保计算出的哈希值在对象相等时始终相同。
- 通常情况下,选择所有用于比较相等性的属性来计算哈希值。
下面是一个示例,演示如何编写equals()和hashCode()方法:
1. public class Person {2. private String name;3. private int age;4. // 构造方法、getter和setter方法省略5. @Override6. public boolean equals(Object o) {7. if (this == o) return true;8. if (o == null || getClass() != o.getClass()) return false;9. Person person = (Person) o;
10. return age == person.age && Objects.equals(name, person.name);
11. }
12. @Override
13. public int hashCode() {
14. return Objects.hash(name, age);
15. }
16. }
在上述示例中,Person类重写了equals()和hashCode()方法。
- equals()方法首先使用`==`运算符比较两个对象的引用是否相同,如果相同则直接返回true,否则继续比较。
- 接着使用`instanceof`关键字检查传入的对象是否为Person类的实例,如果不是则返回false。
- 在比较属性值时,使用了Objects类的equals()方法,比较了两个对象的name和age属性是否相同。
- hashCode()方法使用了Objects类的hash()方法来计算哈希值,使用了name和age属性。
这样,在使用集合类(如List、Set、Map)时就能正确比较和存储Person对象了。
(文章为作者在学习java过程中的一些个人体会总结和借鉴,如有不当、错误的地方,请各位大佬批评指正,定当努力改正,如有侵权请联系作者删帖。)