好的,我从多个地方了解到,每当我覆盖equals()方法时,我也需要覆盖hashCode()方法。但请考虑以下代码片段:
package test;
public class MyCustomObject {
int intVal1;
int intVal2;
public MyCustomObject(int val1, int val2){
intVal1 = val1;
intVal2 = val2;
}
public boolean equals(Object obj){
return (((MyCustomObject)obj).intVal1 == this.intVal1) &&
(((MyCustomObject)obj).intVal2 == this.intVal2);
}
public static void main(String a[]){
MyCustomObject m1 = new MyCustomObject(3,5);
MyCustomObject m2 = new MyCustomObject(3,5);
MyCustomObject m3 = new MyCustomObject(4,5);
System.out.println(m1.equals(m2));
System.out.println(m1.equals(m3));
}
}
这里的输出是true和false,正好符合我的要求,我并不介意覆盖hashCode()方法。这意味着覆盖hashCode()方法是一种选择而不是必须的,就像每个人所说的那样。
我想要第二个确认。