Hello, Coding
[ JAVA ] 두 객체가 동일한 hashCode()를 가지면 Equals()가 참인가? 본문
이것에 대해 먼저 다루기 전에 Equals()가 무엇인지 알 필요가 있다. Equals()는 자바에서 비교할 때 쓰이는
메소드인데 2개의 객체가 동일한지 검사할 때 쓰인다.
그리고 다음으로는 hashCode가 무엇인지 알아야 한다.
자바에서 hashCode는 자료구조를 사용할 때 자료가 저장되는 위치를 결정하기 위해 쓰이게 된다.
그러면 두 객체가 동일한 hashCode를 가지면 Equals()가 참으로 나오게 될까?
결론부터 말하자면 그렇지는 않다.
만약 문자열 "Hello World"의 Hash code가 "12930481" 이라 했을 때
그렇다고 해서 "12930481"이라는 해시 코드를 문자열 "Hello World"만
가질 수 있는건 아니기 때문이다. 다른 문자열도 언제든지 동일한 해쉬코드를 받을 수 있다.
그런 이유로 해시 자료구조에서는 hashcode로 비교를 한 후, 추가적으로 equals도 비교를 하고 같지 않기 때문에 해시가 충돌했다고 판단해서 새로운 인덱스에 데이터를 생성하게 된다.
그래서 hashCode() 와 Equals()는 같이 재정의 해야 한다.
우리는 이것을 자바에서는 Override (오버라이딩) 한다고 말한다.
'개발 질문 & 답변 > 자바 질의응답' 카테고리의 다른 글
[ JAVA ] 자바에서 문자열을 다루는 메소드 총 정리 (0) | 2023.05.28 |
---|---|
[ JAVA ] 자바에서 String은 기본 데이터 타입인가? (0) | 2023.05.28 |
[ JAVA ] 자바에서 final은 어디에 쓰일까? (0) | 2023.05.27 |
[ JAVA ] "==" 와 "equals" 의 차이점은 무엇일까? (0) | 2023.05.26 |
[ JAVA ] JDK와 JRE의 차이점은 무엇일까? (0) | 2023.05.26 |