好的,我从很多地方和来源听说,每当我重写 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() 覆盖是一种选择,而不是像大家所说的那样是强制性的。
我想要第二次确认。
它适合您,因为您的代码不使用任何需要的功能(HashMap、HashTable)hashCode()
API.
但是,您不知道您的类(可能不是一次性编写的)稍后是否会在确实使用其对象作为哈希键的代码中被调用,在这种情况下,事情将会受到影响。
根据对象类的文档:
hashCode的通用约定是:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)