Ok, ho sentito da molti posti e fonti che ogni volta che sovrascrivo il metodo equals(), ho bisogno di sovrascrivere anche il metodo hashCode(). Ma si consideri il seguente frammento di codicePerché dovrei eseguire l'override di hashCode() quando sovrascrivo il metodo equals()?
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));
}
}
Qui l'uscita è vera, falsa esattamente come voglio che sia e mi preoccupo di override del metodo hashCode() a tutti. Ciò significa che l'override di hashCode() è un'opzione piuttosto che obbligatoria, come dicono tutti.
Voglio una seconda conferma.
possibile duplicato di http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c – Oded
Non un dupe di quello; questo è C#, questo è Java. (Il problema è molto simile, forse identico, ma comunque.) – Thomas