티스토리 뷰
hashCode()
String str1 = "JAVA";
String str2 = "JAVA";
String str3 = new String("JAVA");
System.out.println("str 1 hashCode : " + str1.hashCode());
System.out.println("str 2 hashCode : " + str2.hashCode());
System.out.println("str 3 hashCode : " + str3.hashCode());
str 1 hashCode : 2269730
str 2 hashCode : 2269730
str 3 hashCode : 2269730
[value를 통해 hashCode를 만드는 매서드]
기본적으로 hashCode()는 Object 클래스에 정의되어 있기 때문에, 하위 클래스들이 오버라이딩 할 수 있습니다. 또한 String 클래스에선 value로 hashCode를 만들고 있기 때문에 object가 달라도 문자열이 같으면 동일한 hashCode를 리턴하게 됩니다.
identityHashCode()
String str1 = "JAVA";
String str2 = "JAVA";
String str3 = new String("JAVA");
System.out.println("str 1 hashCode : " + System.identityHashCode(str1));
System.out.println("str 2 hashCode : " + System.identityHashCode(str2));
System.out.println("str 3 hashCode : " + System.identityHashCode(str3));
str 1 hashCode : 1995265320
str 2 hashCode : 1995265320
str 3 hashCode : 1746572565
반면 identityHashCode()는 System클래스에 정의되며 오버라이딩 할 수 없고, 전달된 객체의 hashcode를 int 로 리턴합니다. 그러므로 값이 아닌 객체를 비교할 때는 identityHashCode()를 사용하는 것이 적절합니다. 라는 것이 잘 알려진 내용이나! str1과 str2의 고유값이 동일하게 출력되는게 보입니다. 즉 identityHashCode()를 이용하더라도 값이 같으면 동일한 고유값이 리턴될 수도 있다는 겁니다. 그러니 객체의 동일성을 확실히 비교하고 싶을 땐, getName을 사용하면 될 것이라 생각합니다. (참고)
정리
- hashCode()는 오버라이딩이 가능하지만 identityHashCode()는 재정의가 불가능하다.
- String 클래스의 hashcode는 value가 동일할 때 같다.
'Programming > Java' 카테고리의 다른 글
인자(argument)와 매개변수(parameter) 차이, 인자 전달 과정 (0) | 2022.03.15 |
---|---|
[Java] JVM 메모리 구조 (0) | 2022.03.09 |
[Java] 예외처리 : Try/Catch, Throws (0) | 2021.08.19 |
[Java] String, StringBuffer, StringBuilder 차이점 (0) | 2021.08.05 |
Java 싱글톤 패턴 예제 (0) | 2021.07.09 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- svn
- CSS
- 오라클
- 부트스트랩
- 스프링부트
- Java
- 프로그래머스
- CS
- 이클립스
- 개발용어
- HeidiSQL
- SQL
- 인턴
- 네트워크
- 넥사크로
- 오류
- C
- Thymeleaf
- 백준
- JSP
- 국비교육
- JVM
- 환경설정
- 데이터베이스
- C++
- 스프링
- Open API
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함