객체의 동일성과 동등성
객체 비교에 있어서 동일성(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 객체가 동등성 비교에서는 참이지만 동일성 비교는 거짓이 됨을 알 수 있습니다.
'자바[Java]' 카테고리의 다른 글
[JAVA] JAVA 설치 및 환경 세팅하기 (0) | 2017.11.29 |
---|---|
[Java] Collections.EMPTY_LIST (1) | 2017.11.24 |
[JAVA] Wrapper 클래스와 오토박싱(Boxing) 오토언박싱(Unboxing) (0) | 2017.11.14 |
[JAVA] 환경변수 설정하는 이유 및 환경변수란 무엇인가 (0) | 2017.10.30 |
[Java] URLEncoder URLDecoder 클래스 (0) | 2017.10.30 |