동등성은 실제 인스턴스가 같음을 의미하며, 참조하는 값을 비교하는 == 비교의 값과 같습니다.
동일성은 인스턴스가 가지고 있는 값이 같은 것을 의미하며 동등성 비교는 equals메소드를 통해 구현해야합니다.
* == 연산자 : 두 객체가 같은지 검사합니다.
- 피 연산자가 원시타입인 경우(int, double, boolean, ...) : 값이 같은지 비교합니다.
- 피 연산자가 참조타입인 경우(Integer, Double) : 객체의 주소가 같은지 비교합니다.
* (override된) equals() 연산자 : 내용이 같은지 검사합니다.
- 피 연산자가 원시타입인 경우 : 내용이 같은지 비교합니다.
- 피 연산자가 참조타입인 경우 : 객체의 주소가 같은지 비교합니다.
public boolean equals(Object obj){
return (this==obj);
}
자바에서 equals를 따로 구현하지 않으면 Object클래스의 equals메서드가 호출되며, Object메소드의 equals는 위 코드처럼 동일성을 비교합니다.
동등성 비교를 위해서는 구현하는 클래스에 equals메소드를 Override하여 구현해야합니다.
String str1 = "abc";
String str2 = "abc";
System.out.println(str1 == str2); // true
System.out.println(str1.equals(str2)); // true
String str3 = new String("abc");
String str4 = new String("abc");
// String을 new연산을 통해 생성한 객체는 heap에 생성된 "abc"를 가리키고 있습니다.
// 각각의 메모리에 "abc"를 저장하고 있으므로 서로의 주소가 다릅니다.
System.out.println(str3 == str4); // false
System.out.println(str3.equals(str4)); // true
728x90
반응형
'Language > Java' 카테고리의 다른 글
직렬화와 역직렬화 (0) | 2021.11.17 |
---|---|
Java Checked Excpetion, UnChecked Exception (0) | 2021.09.26 |
SOLID 원칙 (0) | 2021.09.03 |
접근 제어자의 종류 (0) | 2021.08.18 |
static (0) | 2021.08.01 |