## hashCode 와 equals
먼저 Java의 모든 class는 Object를 상속받는다.
이때 Object class에는 hashCode(), equals() 함수가 있는데 이를 알아보자
### hashCode()
``` java
@IntrinsicCandidate
public native int hashCode();
```
위는 Object() 클래스의 hashCode 함수이다.
`@IntrinsicCandidate` 이 주석은 JVM에서 최적화를 하라는 어노테이션이다.
위 코드의 기능은 메모리의 주소를 해시 값으로 반환하는것이다.
### equals()
```java
public boolean equals(Object obj) {
return (this == obj);
}
```
위는 Object의 equals 함수이다. 위 코드를 보면 Object 객체를 `==` 를 이용하여 비교하는것을 볼 수 있는데, 이는 두 객체의 주소 값을 비교하는 것이다.
(내가 헷갈린 것은 해시 코드를 비교하는줄 알았는데 순수 주소값 비교이다.)
여기까지가 두 함수에 대한 정보이고 두 함수를 오버라이딩하는 이유는 새로운 class 를 만들고 비교할때에 두 함수를 재정의 하여 사용하기 때문이다.
대표적으로 String class의 경우 두 함수를 재정의 하여 비교하는데 equals 에서 hashCode의 값을 우선 비교한 후 다를 경우 그 안의 내용을 비교하는 형태로 재정의 하여 사용한다.
'Java' 카테고리의 다른 글
| Java 정리 - 5 (상속과 구현) (1) | 2025.02.04 |
|---|---|
| Java 정리 - 4 (접근 제한자) (0) | 2025.02.04 |
| Java 정리 - 3 (overloading, overriding) (1) | 2025.02.04 |