java.lang패키지
- 자바프로그래밍에 가장 기본이 되는 클래스들을 포함
- import문 없이 사용 가능
- ex) String클래스, System클래스
Object 클래스
- 모든 클래스의 최고 조상
→ Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능
hashCode() 의 특징
- 해싱(hashing)기법에 사용되는 '해시함수(hash function)' 를 구현한 메소드
- 객체의 주소값으로 해시코드를 만들어 반환한다.
- 해싱(hashing) : 데이터 관리 기법 중 하나
- 다량의 데이터를 저장하고 검색하는 데 유용
- 해시함수(hash function) : 찾으려는 값을 입력하면, 값이 저장된 위치를 알려주는 해시코드를 반환
- 해싱(hashing) : 데이터 관리 기법 중 하나
- 객체의 주소값으로 해시코드를 만들어 반환한다.
- 32bit JVM : 서로 다른 두 객체는 결코 같은 해시코드를 가질 수 없다.
- 64bit JVM : 8byte 주소값으로 해시코드(4byte)를 만들기 때문에 해시코드가 중복 가능하다.
- 변수의 값을 비교하는 경우 equals() 처럼 hashCode()도 오버라이딩 해야 한다.
- 같은 객체라면 hashCode메서드를 호출했을 때의 결과값인 해시코드도 같아야 하기 때문이다.
- HashMap, HashSet 에 저장할 객체라면 반드시 hashCode()를 오버라이딩 해야 한다.
class HashCodeEx1 {
public static void main(String[] args) {
String str1 = new String("abc");
String str2 = new String("abc");
System.out.println(str1.equals(str2));
// true
// String 클래스는 내용을 비교하도록 overriding 되어 있다.
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
// 96354
// String 클래스는 내용이 같으면, 동일한 해시코드를 반환하도록 hashCode()가 overriding 되어 있다.
// -> 문자열 내용이 같은 String이 hashCode()룰 호출하면 항상 동일한 해시코드값을 얻는다.
System.out.println(System.identityHashCode(str1));
// 1435804085
System.out.println(System.identityHashCode(str2));
// 1784662007
// System.identityHashCode(Object obj)는 객체의 주소값으로 해시코드를 생성한다.
// -> 모든 객체에 대해 항상 다른 해시코드값을 반환할 것을 보장한다. 호출결과는 실행할 때마다 달라질 수 있다.
}
}
- Spring project 실습에서의 equals() and hashCode()
'JAVA' 카테고리의 다른 글
java.lang패키지 - Object클래스(toString()) (0) | 2023.05.23 |
---|---|
java.lang패키지 - Object클래스(equals()) (0) | 2023.05.02 |
clone 메서드 (0) | 2023.02.24 |
애너테이션(annotation) (0) | 2022.12.19 |
열거형(enum) (0) | 2022.12.19 |