Java

Object 클래스의 메서드 - equals()

1space 2025. 6. 22. 00:31

자바의 정석[기초편]으로 공부한 내용을 정리한 글입니다.

 

equals() 메서드의 기본 동작 (기본 구현)

Object 클래스의 equals() 메서드 기본 코드

public boolean equals(Object obj) {
    return (this == obj);
}
  • equals() 메서드는 기본적으로 두 객체의 주소(참조값) 를 비교합니다.
  • 즉, this == obj일 때만 true를 반환하고, 나머지는 모두 false입니다.
  • 따라서 같은 내용의 값을 갖고 있어도 다른 객체이면 false가 됩니다.

 

예제 1 

class Value {
    int value;
    Value(int value) {
        this.value = value;
    }
}

public class Ex9_1 {
    public static void main(String[] args) {
        Value v1 = new Value(10);
        Value v2 = new Value(10);

        if (v1.equals(v2))
            System.out.println("v1과 v2는 같습니다.");
        else
            System.out.println("v1과 v2는 다릅니다.");
    }
}
  • v1과 v2는 모두 Value 객체이고, 내부의 value 값은 같지만, 서로 다른 객체입니다.
  • 기본 equals()는 참조값(주소)을 비교하기 때문에 v1.equals(v2)는 false를 반환합니다.
  • 따라서 출력은 v1과 v2는 다릅니다.
  • v1 → 주소: 0x1234, 값: 10
  • v2 → 주소: 0x2345, 값: 10
  • 주소가 다르므로 equals()는 false.

 

equals() 오버라이딩 (값 비교를 위한 재정의)

오버라이딩 예제

class Person {
    long id;

    Person(long id) {
        this.id = id;
    }

    public boolean equals(Object obj) {
        if (obj instanceof Person)
            return id == ((Person)obj).id;
        else
            return false;
    }
}
  • equals()를 직접 오버라이딩 해서 id 값이 같으면 true를 반환하게 했습니다.
  • 이로써 주소가 달라도 내부 데이터가 같으면 같다고 판단할 수 있습니다.

 

예제 2

public class Ex9_2 {
    public static void main(String[] args) {
        Person p1 = new Person(8011081111222L);
        Person p2 = new Person(8011081111222L);

        if (p1.equals(p2))
            System.out.println("p1과 p2는 같은 사람입니다.");
        else
            System.out.println("p1과 p2는 다른 사람입니다.");
    }
}
  • p1과 p2는 서로 다른 객체이지만 id 값이 같으므로 equals()는 true를 반환합니다.
  • 출력 결과는 "p1과 p2는 같은 사람입니다."
  • p1 → 주소: 0x100, id: 8011081111222
  • p2 → 주소: 0x200, id: 8011081111222
  • 기본 equals()는 주소 비교라서 false
  • 오버라이딩된 equals()는 id 값 비교라서 true

 

정리

구분 기본 equals() 오버리이딩된 equals()
비교 대상 객체의 주소값 객체의 속성 값 (예: id, name 등)
결과 값이 같아도 false 값이 같으면 true 가능
사용 목적 객체 동일성(identity) 논리적 동등성(equality)

'Java' 카테고리의 다른 글

Object클래스 메서드 - toString()  (0) 2025.06.22
Object클래스의 메서드 - hashCode()  (0) 2025.06.22
Object클래스  (0) 2025.06.22
연결된 예외  (0) 2025.06.21
예외 되던지기  (0) 2025.06.21