JAVA 기초 (28) hashCode( )

코린이서현이·2023년 8월 7일
0

Java

목록 보기
28/46

🤔들어가면서🤔

오버라이딩은 신기해~!

📖 hashCode()

인스턴스의 주소값을 반환한다.

🙂 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()

String의 hashCode() : eqauls()의 메소드가 결과값이 true인 경우 동일한 해시코드 값을 반환한다.

profile
24년도까지 프로젝트 두개를 마치고 25년에는 개발 팀장을 할 수 있는 실력이 되자!

0개의 댓글