Хорошо, я слышал из многих мест и источников, что всякий раз, когда я переопределяю метод 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() overriding является опцией, а скорее обязательной, как говорят все.
Я хочу получить второе подтверждение.