해결된 질문
작성
·
161
0
여기에서 hashCode의 값이 선생님과 다르게 출력되는데 잘못된 게 맞나요?
문자 고유의 값이니까 같은 문자라면 어느 컴퓨터나 같은 hashCode가 출력되야 하는 게 맞는거죠??
public class MyHashSetV2Main2 {
public static void main(String[] args) {
Member hi = new Member("hi");
Member jpa = new Member("JPA"); // 대문자 주의!
Member java = new Member("java");
Member spring = new Member("spring");
System.out.println("hi.hashCode() = " + hi.hashCode());
System.out.println("jpa.hashCode() = " + jpa.hashCode());
System.out.println("java.hashCode() = " + java.hashCode());
System.out.println("spring.hashCode() = " + spring.hashCode());
MyHashSetV2 set = new MyHashSetV2(10);
set.add(hi); // Member 타입의 인스턴스를 myHashSetV2에 넣음.
set.add(jpa);
set.add(java);
set.add(spring);
System.out.println("set = " + set);
//검색
Member searchValue = new Member("JPA");
boolean result = set.contains(searchValue);
System.out.println("hi.contains(" + searchValue + ") = " + result);
}
//출력 결과
hi.hashCode() = 3329
jpa.hashCode() = 73659
java.hashCode() = 3254818
spring.hashCode() = -895679987
답변 1
Member클래스의 재정의한 hashCode() 의 구현 코드를 보면
@Override public int hashCode() { return Objects.hashCode(id); }
return Objects.hashCode
()로 되어있습니다.
return Objects.hash
()로(=강의코드) 확인해보시겠어요?
Member 클래스에 hashCode 오버라이딩도 새로 해봤는데 다르게 나옵니다 ㅠㅠ