ठीक है, मैंने कई स्थानों और स्रोतों से सुना है कि जब भी मैं बराबर() विधि को ओवरराइड करता हूं, तो मुझे हैशकोड() विधि को ओवरराइड करने की आवश्यकता होती है। लेकिन कोडजब मैं बराबर() विधि को ओवरराइड करता हूं तो मुझे हैशकोड() को ओवरराइड क्यों करना चाहिए?
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));
}
}
यहाँ का निम्न भाग पर विचार उत्पादन होता है सच है, झूठी ठीक वैसी ही मैं इसे होना चाहता हूँ और मैं बिल्कुल hashCode() विधि अधिभावी का ख्याल नहीं है। इसका मतलब है कि हैशकोड() ओवरराइडिंग एक विकल्प है जो हर किसी के जैसा अनिवार्य है।
मुझे एक दूसरी पुष्टि चाहिए।
http://stackoverflow.com/questions/371328/why-is-it-important-to-override-gethashcode-when-equals-method-is-overriden-in-c – Oded
का डुप्लिकेट नहीं वो वाला; वह सी # है, यह जावा है। (यह मुद्दा बहुत समान है, शायद समान है, लेकिन फिर भी।) – Thomas