Object에서는 동등성 비교를 위한 equals() 메서드를 지원한다.
자바에서는 같다라는 표현을 두가지로 나타낼 수 있다.
동일성은 물리적으로 메모리에 같은 인스턴스 참조값을 확인하고, 동등성은 논리적으로 같은지를 확인한다.
package lang.object.equals;
public class EqualsMainV1 {
public static void main(String[] args) {
UserV1 user1 = new UserV1("id-100");
UserV1 user2 = new UserV1("id-100");
System.out.println("identity = " + (user1 == user2));
System.out.println("equality = " + (user1.equals(user2)));
}
}
public boolean equals(Object obj) {
return (this == obj);
}
Object 클래스의 equals() 메서드는 기본적으로 == 연산자를 사용한 동일성 비교를 수행한다.
동등성이라는 개념은 클래스마다 다르게 받아들일 수 있다. 각 클래스마다 생각하는 동등성이 다르기 때문이다.
따라서, 동등성 비교를 하고 싶다면 equals() 메서드를 재정의 해야한다.
동등성 비교를 위해 equals()를 오버라이딩하면 논리적으로 같은 객체를 비교할 수 있다.
그렇지 않으면 동일성 비교를 기본적으로 제공한다.