> For the complete documentation index, see [llms.txt](https://heunnajo.gitbook.io/jpa-basic/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://heunnajo.gitbook.io/jpa-basic/9./undefined-3.md).

# 값 타입의 비교

**자바 기**

1. **동일**&#xC131;**(identity)** 비교 : **인스턴스의 참조 값** 비교. **==** 사용
2. **동등**&#xC131;**(equivalence)** 비교 : **인스턴스의 값**을 비교. **equals()** 사용

**값 타입은 객체 타입이기 때문에 a.equals(b)를 사용해서 동등성 비교를 해야한다!**

실무에서 equals를 자주 사용하지는 않지만 필요에 따라 값을 비교해야할 수 있다.\
ex) 자택 주소와 직장 주소가 동일할 경우 처리해야하는 비즈니스 로직이 있는 경우 사용한다!

equals를 자동 오버라이딩한 모습 - 필드에 직접 접근함.\
(참고)프록시 객체나 다형성을 사용하고 있을 때는 Getter로 가져와야할 수도 있다!

```java
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Address address = (Address) o;
    return Objects.equals(city, address.city) && Objects.equals(street, address.street) && Objects.equals(zipcode, address.zipcode);
}
```

equals를 오버라이딩할 때 hashCode()도 함께 오버라이딩해야 해시맵이나 자바에서 제공하는 컬렉션들도 함께 사용할 수 있다!

```java
@Override
public int hashCode() {
    return Objects.hash(city, street, zipcode);
}
```
