equals 메서드는 자바에 입문하자마자 많이 사용해봤을 것이다.
equals 메서드의 형태는 아래와 같다.
public boolean equals(Object obj) {
return (this = obj);
}
//
보다시피 equals는 객체의 참조 변수를 기준으로 Boolean 값을 반환한다.
엥?? 아닌데요?? new String("aa").equals(new String("aa"))는 true인데요??
그것은 String 클래스에 equals가 오버라이드 되어있기 때문이다. 못 믿겠으면 다음 예제를 확인하자.
class Num {
int num;
Num(int num){ this.num = num; }
}
public class Equals {
public static void main(String[] args) {
Num num1 = new Num(10);
Num num2 = new Num(10);
System.out.println(num1.equals(num2));
}
}
// false
Num num1과 Num num2의 int num은 둘 다 10이라는 값을 가지고 있지만 서로 다른 객체를 참조하고 있다.
따라서 equals 메서드를 사용해도 false를 반환한다.
그러면 String 클래스처럼 값 == 값으로 비교해서 값을 반환하게 만들 수는 없는 것일까?
당연히 가능하다.
class myNum {
int num;
myNum(int num){ this.num = num; }
public boolean equals (Object obj) {
if ( obj instanceof myNum ) {
// 같은 타입일 때만 비교한다
return this.num == ((myNum) obj).num;
} else { return false; }
}
// 메서드를 실행하는 객체의 변수 값과 대상의 변수 값을 직접적으로 비교하고 있다.
}
public class Equals {
public static void main(String[] args) {
myNum myNum1 = new myNum(10);
myNum myNum2 = new myNum(10);
System.out.println(myNum1.equals(myNum2));
}
}
// true
String 객체를 비교 연산할 때와 같은 방식으로 boolean 값을 리턴하고 있는 것을 확인할 수 있다.
'Language & Framework > Java' 카테고리의 다른 글
자바 Object 클래스의 기본 메서드(3) clone() 얇은 복사와 깊은 복사 (0) | 2022.06.08 |
---|---|
자바 Object 클래스의 기본 메서드(2) toString() (0) | 2022.06.08 |
자바 사용자 지정 예외처리 (0) | 2022.06.07 |
자바 예외 처리란? 어떻게 해야하는가. (0) | 2022.06.07 |
자바 내부 클래스 (0) | 2022.06.06 |