有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    你可以使用System.identityHashCodesuper.hashCode()此外,你应该编写一个更好的哈希代码,因为任何名字和卷的长度之和相等的学生都会有相同的哈希代码。比如(9,“鲍勃”)和(7,“史蒂夫”)。这将为未来的bug带来许多潜在问题。省去你的头疼,写下这样的话:

     public int hashCode() {
          int hash = 31 * roll;
          hash = 31 * hash + name.hashCode();
          return hash;
     }
    

    另外,请注意,equals方法不满足JLS中的equals方法

    this.equals(null)如果返回false,您的将抛出ClassCastException

    这也可能导致将来出现bug