Object 클래스
- 모든 클래스의 최고 조상. 오직 11개의 메서드만 가지고 있음
- notify(), wait() 등은 쓰레드와 관련된 메서드
- 대표적인 것 몇 가지만 추려보면
public boolean equals(Object obj)
- 객체 자신과 객체 obj가 같은 객체인지 알려줌 (같으면 true)
public class getClass()
- 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환 (객체 정보)
public int hashcode()
- 객체 자신의 해시코드 반환
public String toString()
- 객체 자신의 정보 문자열로 변환
equals(Object obj)
- 객체 자신(this)과 주어진 객체(obj)를 비교한다. 같으면 true, 다르면 false
- Object 클래스의 equals()는 객체의
주소
를 비교 (참조변수 값 비교)
public boolean equals(Object obj) {
return (this==obj);
}
예제1
- Object 클래스의 equals()는 객체의
주소
를 비교하지만 오버라이딩을 통해 주소가 아닌 value를 비교하여 서로 다른 객체여도 같다는 결과가 나올 수 있다!
class Ex {
public static void main(String args[]) {
Value v1 = new Value(10);
Value v2 = new Value(10);
if (v1.equals(v2))
System.out.println("v1과 v2가 같습니다.");
else
System.out.println("v1과 v2가 다릅니다.");
}
}
class Value {
int value;
Value(int Value) {
this.value = value;
}
public boolean equals(Object obj) {
if(!(obj instanceof Value)) return false;
Value v = (Value)obj;
return this.value == v.value;
}
}
예제2
class Person {
long id;
public boolean equals(Object obj) {
if(obj instanceof Person)
return id == ((Person)obj).id;
else
return false;
}
Person(long id) {
this.id = id;
}
}
class Ex {
public static void main(String args[]) {
Person p1 = new Person(1000);
Person p2 = new Person(1000);
if (p1.equals(p2))
System.out.println("p1과 p2가 같습니다.");
else
System.out.println("p1과 p2가 다릅니다.");
}
}
정리
- equals()를 통해 대상을 비교하면 값이 같아도 false, 왜냐하면 주소로 비교하기 때문이다. 그래서 객체가 달라고 값이 같을 때 true가 나오게하려면 인스턴스 변수 값을 비교하도록 오버라이딩해야되고 그 과정에서 형변환을 해주어야한다. (형변환 할 때 instanceof 활용)