[Java] equals()

2025. 2. 5. 00:09·TIL/Java

동일성과 동등성

  • 자바는 두 객체가 같다는 표현을 2가지를 통해서 할 수 있다.
  • 동일성 ( == ) : 물리적인 참조 값이 동일한가? 즉 동일한 인스턴스를 참조하고 있는가?
  • 동등성 ( equals() ) : 두 객체의 논리적인 값이 동일한가? ( 객체가 갖고 있는 정보가 동일하다 )
public class User {

    private Long id;

    public User(Long id) {
        this.id = id;
    }
}
public class EqualsMain {

    public static void main(String[] args) {
        User user1 = new User(1L);
        User user2 = new User(1L);

        System.out.println("identity = " + (user1 == user2));
        System.out.println("identity = " + (user1.equals(user2)));
    }
}

// 실행결과
// false
// false
  • User 객체를 2번 사용했기 때문에 인스턴스가 2번 생성되었을 것이다

  • 따라서 == 을 활용한 동일성 비교는 false가 나오는 것이 맞을 것 같은데, 객체의 정보를 비교하는 equals 는 왜 false가 나올까?

equals() 메서드

public boolean equals(Object obj) {
    return (this == obj);
}
  • Object 클래스에서 제공하는 equals는 기본적으로 동일성을 비교하여 그 결과를 반환하기 때문이다.
  • equals() 메서드를 통해서 동등성을 비교하기 위해서는 메서드 오버라이딩이 필요하다
@Override
public boolean equals(Object object) {
    if (this == object) return true;
    if (object == null || getClass() != object.getClass()) return false;
    UserV2 userV2 = (UserV2) object;
    return Objects.equals(id, userV2.id);
}
  • 직접 코드를 작성해서 동등성 비교를 할 수도 있지만 실제로 다양한 제약조건들이 존재하기 때문에 기본적으로 ide에서 제공하는 equals를 활용하는 것이 편리하다
  • 메서드를 오버라이딩한 뒤 다시 EqualsMain을 실행해보면 두번째 출력 결과는 true로 바뀌게 된다

'TIL > Java' 카테고리의 다른 글

[Java] String 클래스  (0) 2025.02.07
[Java] 불변 객체  (0) 2025.02.06
[Java] toString()  (0) 2025.02.04
[Java] Object 클래스  (1) 2025.02.04
[Java] 추상 클래스  (1) 2025.02.04
'TIL/Java' 카테고리의 다른 글
  • [Java] String 클래스
  • [Java] 불변 객체
  • [Java] toString()
  • [Java] Object 클래스
Charlie.han
Charlie.han
백엔드 개발자가 되기 위해 공부한 것들(Java, Spring, SQL, 네트워크, AWS 등)을 기록하고 공유하는 블로그입니다.
  • Charlie.han
    Chalie's Devlog
    Charlie.han
  • 전체
    오늘
    어제
    • 분류 전체보기 (32)
      • TIL (32)
        • Java (20)
        • Spring (2)
        • SQL (5)
        • 알고리즘 (4)
        • 트러블슈팅 (1)
      • WIL (0)
        • 카카오테크 부트캠프 (0)
  • 태그

    데이터베이스
    SQL
    묵시적형변환
    인터페이스
    unsupported characters for the charset 'iso-8859-1'
    super()
    static메서드
    sql limit
    string
    자바
    불변객체
    Java
    제네릭 클래스
    static 필드
    프로그래머스 베스트앨범 자바
    프로그래머스
    sql where
    타입안전열거형
    다형성
    인스턴스
    인텔리제이한글
    참조공유
    프로그래머스 베스트앨범
    인텔리제이 한글 깨짐
    jdk란?
    컬렉션프레임워크
    프로그래머스 소수찾기 자바
    object
    default메서드
    프로그래머스 소수찾기
  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Charlie.han
[Java] equals()
상단으로

티스토리툴바