Java

Java 정리 - 2 (hashCode 와 equals)

cheesecrust1008 2025. 2. 4. 14:36

## 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