Java == equals() 차이

60jong·2022년 8월 21일
0

Java

목록 보기
2/14

자바에서는 두 수 혹은 두 오브젝트가 같은지 비교할 때 == or equals()를 사용한다. 이 둘의 차이는 무엇일까?

동일성 vs 동등성

동일성 (identity, == 연산자), 인스턴스 자체가 동일
동등성 (equality, equals() 메서드), 인스턴스 자체는 다르지만 내부의 값이 동일

결론적으로

  • == 연산자는 주소값을 비교해 동일한 인스턴스인지 판별!
  • equals() 메서드는 인스턴스 내부의 값을 비교해서 동일한지 판별!
    public static void main(String[] args) {
        int a = 1;
        int b = 1;

        Integer A = new Integer(1);
        Integer B = new Integer(1);

        System.out.println(a==b); // true
        System.out.println(A==B); // false
    }

내가 착각했던 것은 equals()에서 "인스턴스 내부의 값을 비교해서 동일한지 판별" 이 "다른 두 객체가 같은 정보(referential type 포함)를 담고 있으면 동등하다."로 이해했었다.

Member memberA = new Member(int age= 24, String name = "ABC");
Member memberB = new Member(24,"ABC");

// 착각한 내용 : memberA와 member는 age 24 / name "ABC" 즉 같은 정보를 담고 있기에 동등!
memberA.equals(memberB); // false

// 올바른 사용
memberA.getAge().equals(memberB.getAge()); // true
// or
memberA.getAge() == memberB.getAge(); // true
memberA.getName().equals(memberB.getName()); // true
profile
울릉도에 별장 짓고 싶다

0개의 댓글