📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
자바[Java] | 2017. 11. 15. 08:00

[Java]객체의 동일성과 동등성 비교

객체의 동일성과 동등성

객체 비교에 있어서 동일성(identity) 비교와 동등성(equality) 비교가 있습니다.

동일성 비교의 경우 다음과 Object a 와 Object b가 있을 경우 정말 같은 객체인지 비교하는 경우를 말하며 == 연산으로 비교하는 경우입니다.

Integer a = new Integer(3);
Integer b = a;

System.out.println(a); //3
System.out.println(b); //3
System.out.println(a == b); //동일성 비교 true
System.out.println(a.equals(b)); //동등성 비교 true

즉 참조변수 a와 b가 같은 객체를 참조하고 있는지 비교합니다. 동일성 비교가 참인 경우 당연히 같은 객체이므로 동등성 비교도 참이 됩니다.

그러나 반대의 경우는 다릅니다.

동등성 비교의 경우 최상의 객체인 Objectequals 메서드를 이용합니다. Objectequals 메서드는 내부적으로 동일성 비교연산을 하도록 되어 있으므로 동일성이 참이 되어야 동등성도 참이 되지만, 하위클래스의 경우 이 equals 메서드를 오버라이드 하여 객체가 가지고 있는 정보의 동등성 비교로 사용하는 경우가 대부분입니다.

Integer a = new Integer(3);
Integer b = new Integer(3);

System.out.println(a); //3
System.out.println(b); //3
System.out.println(a == b); //동일성 비교 false
System.out.println(a.equals(b)); //동등성 비교 true

Integer 클래스의 경우 equals 메서드를 오버라이드 했으며, 객체가 가지고 있는 정보(멤버 변수값)을 기준으로 동등성 비교를 하므로 a와 b 객체가 동등성 비교에서는 참이지만 동일성 비교는 거짓이 됨을 알 수 있습니다.

도로락

도로락

Writer

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그