오버라이딩은 신기해~!
인스턴스의 주소값을 반환한다.
hashCode()를 재정의하는 방법
⚠️
eqauls()
의 메소드가 결과값이true
인 경우 동일한 해시코드 값을 반환하도록 재정의해야한다.
👉eqauls()
의 메소드를 재정의했으면hashCode()
또한 재정의해야한다.
이때eqauls()
를 재정의 할때 사용한 멤버변수를 활용하는 것이 좋다.
✍️ 예시코드
class Student {
String studentName;
int studentID;
boolean scholarship;
Student(String studentName,int studentID,boolean scholarship){
this.studentName = studentName;
this.studentID = studentID;
this.scholarship = scholarship;
}
//toString() 재정의
@Override
public String toString() {
return "student의 정보 {" +
"studentName='" + studentName + '\'' +
", studentID=" + studentID +
", scholarship=" + scholarship +
'}';
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Student){
Student std =(Student) obj;
if(this.studentID == std.studentID){
return true;
}else {
return false;
}
}
return false;
}
@Override
public int hashCode() {
return this.studentID;
}
}
public class Test0805 {
public static void main(String[] args) {
Student younghee = new Student("영희", 202045801, true);
Student younghee_Re = new Student("영희", 202045801, true);
System.out.println("eqauls()의 결과 :"+younghee_Re.equals(younghee));
//eqauls()의 결과 :true
System.out.println(younghee.hashCode()); //202045801
System.out.println(younghee_Re.hashCode()); //202045801
//실제 인스턴스 주소 값 → 다르다.
System.out.println(System.identityHashCode(younghee)); //1880587981
System.out.println(System.identityHashCode(younghee_Re)); //511754216
}
}
String의 hashCode()
: eqauls()
의 메소드가 결과값이 true
인 경우 동일한 해시코드 값을 반환한다.