java如何在重写hashCode()方法后使用它
//学生。爪哇
class Student{
private int roll;
private String name;
public Student(int roll,String name){
this.roll=roll;
this.name=name;
}
public int hashCode(){
return roll+name.length();
}
public boolean equals(Object obj){
Student s=(Student)obj;
return (this.roll==s.roll && this.name.equals(s.name));
}
}
//IssueID。爪哇
class IssueID{
public static void issueID(Student s1,Student s2){
if(s1.equals(s2))
System.out.println("New ID issued");
else
System.out.println("New ID NOT issued");
}
}
//研究所。爪哇
import java.lang.Object;
class Institute{
public static void main(String[] args){
Student s1=new Student(38,"shiva");
Student s2=new Student(45,"aditya");
IssueID.issueID(s1,s2);
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
}
}
与上面的代码一样,我重写了hashCode()
方法。这听起来可能很傻,但我可以同时使用相同的学生对象(s1和s2)访问java.lang.Object.hashCode()
方法吗
# 1 楼答案
你可以使用
System.identityHashCode
或super.hashCode()
此外,你应该编写一个更好的哈希代码,因为任何名字和卷的长度之和相等的学生都会有相同的哈希代码。比如(9,“鲍勃”)和(7,“史蒂夫”)。这将为未来的bug带来许多潜在问题。省去你的头疼,写下这样的话:另外,请注意,equals方法不满足JLS中的equals方法
this.equals(null)
如果返回false,您的将抛出ClassCastException这也可能导致将来出现bug