GitHub

https://github.com/Backcoder-June

BackCoder 기록 그리고 숙달

Back to the Java

.equals( ) 메소드 override => 객체 비교하기

Backcoder 2023. 1. 11. 21:35

[ 객체 끼리 비교 ] 

 

Product p1 = new Product("laptop", "lenovo"); 

Product p2 = new Product("laptop", "lenovo"); 

 

두 개의 객체가 같은 값을 가지고 있더라도, 주소값이 다르므로

자바는 두 객체를 서로 다른 객체로 인식합니다. 


1. equals 
== 주소 값 다르게 잡혀있어서 당연히 다르게 나오고 

equals 로도 기본은 false 잡히는데 이건 override 해서 
주소값은 무시하고 값만으로 비교할 수 있게 해서 사용하기도 합니다. 

예시 ) 
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        ProductsVO that = (ProductsVO) o;
        return productId.equals(that.productId) && productName.equals(that.productName) && price.equals(that.price);
    }

2. HashCode
: equals 를 override 해서 사용할 때는 세트로 
hashcode 도 같이 override 설정을 해줘야 필드값이 같은 객체를 동일 객체로 인식해 줍니다.

(equals 만 해주면 동일 필드값은 객체는 hashcode 가 달라서 다른 객체로 인식)

예시 ) 
@Override
    public int hashCode() {
        return Objects.hash(productId, productName, price);
    }


=> 필드값이 같으면 

두 개의 객체에 equals 사용 시 동일 객체로 인식