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

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

 

1
2
3
4
5
6
7
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
cs

 

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

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

 

1
2
3
4
5
6
7
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
cs

 

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

 

 

블로그 이미지

도로락

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

,