如何在覆盖它之后使用原始的hashCode()方法

Shi*_*uri 6 java

//Student.java

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));
    }

}
Run Code Online (Sandbox Code Playgroud)

//IssueID.java

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");

    }

}
Run Code Online (Sandbox Code Playgroud)

//Institute.java

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());
    }

}
Run Code Online (Sandbox Code Playgroud)

如上面的代码所示,我已经覆盖了该hashCode()方法.这可能听起来很傻,但是我可以java.lang.Object.hashCode()同时使用相同的Student对象(s1和s2)来访问方法吗?

Lou*_*man 17

是的,有System.identityHashCode:

返回给定对象的相同哈希码,就像默认方法hashCode()返回的一样,无论给定对象的类是否覆盖hashCode().