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