자바의 equals는 객체의 참조 변수를 비교해주는 메서드이다.
비교 결과의 결과값을 boolean으로 알려준다.
public boolean equals(Object obj) {
return (this==obj);
}
위의 코드는 Object에 정의된 equals메서드 이다.
두 객체의 같고 다름을 참조 변수의 값으로 판단한다.
주소 값을 비교해서 true, false의 값을 반환하는 것이다.
우리가 흔히 사용하는 String 클래스의 문자열의 비교는 equals()가 기본적으로 오버라이딩 되어 있어 주소가 아닌 값을 비교하게 된다.
아래는 equals() 오버라이딩의 예제이다.
public class Test {
public static void main(String[] args) {
Fruit p1 = new Fruit(10);
Fruit p2 = new Fruit(10);
System.out.println(p1.equals(p2));
}
}
class Fruit {
int num;
public Fruit(int num) {
this.num = num;
}
public boolean equals(Object obj) {
if (obj != null && obj instanceof Fruit) {
return num == ((Fruit)obj).num;
} else {
return false;
}
}
}
위의 예제처럼 equals()를 오버라이딩하여 객체의 데이터를 이용해 비교할 경우 hashCode() 매서드도 같이 오버라이딩 해주는 것이 좋다.
만약 해시코드 값이 다름을 항상 보장 하려면 System.identityHashCode(Object x)를 사용하면 주소값을 이용하여 hash값을 생성 하기 때문에 항상 다른 값을 반환 한다.
반응형
'Java & 스프링 > Java' 카테고리의 다른 글
[Java] Java의 날짜와 시간, Time API - (ZonedDateTime, LocalDateTime) (0) | 2019.10.12 |
---|---|
[Java] toString() 메서드 (0) | 2019.05.01 |
[Java] 접근제어자 (0) | 2019.04.24 |
[Java] extends(상속), implements(인터페이스), abstract(추상) (0) | 2019.04.23 |
[Java] 오버로딩, 오버라이딩 (0) | 2019.04.23 |
댓글