Object.equals
public static void main(String[] args) {
Test t = new Test("hi");
Test t2 = new Test("hi");
t.equals(t2);
}
static class Test {
String test;
Test(String test) {
this.test = test;
}
}
모든 객체의 조상은 Object고 Object는 equals method를 가지고 있다.
객체를 생성하고 equals에 별도의 @Override 가 없다면
public boolean equals(Object obj) {
return (this == obj);
}
위와 같이 동작한다. 참조 주소가 같아야 true를 반환하는 equals 이다.
String t3 = "hi";
String t4 = "hi";
t3.equals(t4);
Long t5 = 5L;
Long t6 = 5L;
t5.equals(t6);
String의 equals는 다음과 같다.
public boolean equals(Object anObject) {
if (this == anObject) {
return true;
}
return (anObject instanceof String aString)
&& (!COMPACT_STRINGS || this.coder == aString.coder)
&& StringLatin1.equals(value, aString.value);
}
Long의 equals는 다음과 같다.
public boolean equals(Object obj) {
if (obj instanceof Long) {
return value == ((Long)obj).longValue();
}
return false;
}
Wrapper class들은 우리가 원하는 참조 주소가 아닌 값을 비교하는 equals 메서드로 @Override 되어있다.
결론
참조 주소가 아닌 값을 비교하고자 한다면 Wrapper class의 equals는 맞다.
'Language > Java' 카테고리의 다른 글
java thread (자바의 정석) (1) | 2023.12.10 |
---|---|
java factory method pattern (0) | 2023.09.06 |
자바) ArrayList LinkedList 시간 비교 (23-07-06) (0) | 2023.07.13 |
자바) ArrayList Capacity (23-07-06) (0) | 2023.07.13 |
자바) combination/ stream (23-06-19) (0) | 2023.07.13 |