Ok, j'ai entendu de nombreux endroits et sources que chaque fois que je substitue la méthode equals(), j'ai besoin de surcharger la méthode hashCode(). Mais considérez la pièce de code suivantePourquoi devrais-je redéfinir hashCode() lorsque je remplace la méthode 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));
}
}
Ici, la sortie est vrai, faux exactement la façon dont je veux que ce soit et je ne garde de passer outre la méthode hashCode() du tout. Cela signifie que le remplacement de hashCode() est une option plutôt obligatoire que tout le monde le dit.
Je veux une deuxième confirmation.
duplicata possible de http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c – Oded
Pas un dupe de celui-là; c'est C#, c'est Java. (Le problème est très similaire, peut-être identique, mais quand même.) – Thomas