IDEA快速为JavaClass重写equals()和hashCode()⽅法菜苋
有⼀些场景需要重写 Java 类的 equals 和 hashCode ⽅法,如 Java 对象作为 Map 的 key 时。IDEA 提供了快速实现重写上述 2 个⽅法的便捷操作,过程简述如下。
定义⼀个 Java Class,名为:Student,代码如下。
st.model;
import lombok.Getter;
import lombok.Setter;
@Getter
@Setter
2035年的中国
public class Student {包含函数
// 姓名
private String stuNm;
// 年龄
private String age;
// 构造函数
public Student(String stuNm, String age){
温暖作文开头this.stuNm = stuNm;
this.age = age;
}
}
快速⽣成上述 2 个⽅法的过程如下:在 Student.java ⽂件中按下 Alt + Ins,调出 Generate,选中 “equals() and
hashCode()”。
在 Generate equals() and hashCode() 窗⼝中,选择 “IntelliJ Default” Template。
选择被包含在 equals() ⽅法中的属性。
选择被包含在 hashCode() ⽅法中的属性。
选择所有的⾮ null 属性。
数学公式小学
点击 Finish 按钮,即可快速⽣成 equals() 和 hashCode() ⽅法,⽣成完后的 Student.java ⽂件如下所⽰。
st.model;
import lombok.Getter;
钢化厂
低卡路里食物表
import lombok.Setter;
@Getter
@Setter
public class Student {
// 姓名
private String stuNm;
// 年龄
private String age;
// 构造函数
public Student(String stuNm, String age){
this.stuNm = stuNm;
this.age = age;
}
@Override
public boolean equals(Object o){
if(this== o)return true;
if(!(o instanceof Student))return fal;
Student student =(Student) o;
if(stuNm != null ?!stuNm.equals(student.stuNm): student.stuNm != null)return fal;
return age != null ? age.equals(student.age): student.age == null;
}
@Override
public int hashCode(){
int result = stuNm != null ? stuNm.hashCode():0;
官运平步青云
result =31* result +(age != null ? age.hashCode():0);
return result;
}
}
如果不重写 equals() 和 hashCode() ⽅法,对引⽤对象进⾏对⽐时,默认对⽐的是对象内存地址。⽽重写⽅法后,只要引⽤对象的姓名和年龄属性值相等,即认为 2 个对象相等。测试⽰例如下。
st.model;
st.model.Student;
public class Test {
public static void main(String[] args){
Student stuA =new Student("张三","20");
Student stuB =new Student("张三","20");
System.out.println(stuA.equals(stuB));// true
System.out.println(stuA == stuB);// fal
System.out.println(stuA.hashCode()== stuB.hashCode());// true }
}