[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)
  • 태그

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

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

티스토리툴바