Java

Java, == 과 equals()의 차이

60jong 2023. 4. 2. 02:36

Velog에서도 포스팅 중입니다:)

 

Java == equals() 차이

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

velog.io

자바에서는 두 수 혹은 두 오브젝트가 같은지 비교할 때 == 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

'Java' 카테고리의 다른 글

Java, 이름 붙은 반복문  (0) 2023.04.02
Java 컴파일 과정  (0) 2023.03.28