반응형
남궁성님의 자바의 정석 기초편을 보면서 혼자 공부하는 공간입니다. 참고 부탁드립니다.
Object 클래스
- 모든 클래스의 최고 조상. 오직 11개의 메서드만 가지고 있다.
Object클래스 메서드 | 설명 |
protected Object clone() | 객체 자신의 복사본을 반환한다. |
public boolean equals(Object obj) | 객체 자신과 객체 obj가 같은 객체인지 알려준다. (같으면 true) |
protected void finalize() | 객체가 소멸될 때 가바지 컬렉터에 의해 자동적으로 호출된다. 이때 수행되어야하는 코드가 있을 때 오버라이딩한다. (거의 사용 X) |
public Class getClass() | 객체 자신의 클래스 정보를 담고 있는 Class 인스턴스를 반환한다. |
public int hashCode() | 객체 자신의 해시코드를 반환한다. |
public String toString() | 객체 자신의 정보를 문자열로 반환한다. |
public void notify() | 객체 자신을 사용하려고 기다리는 쓰레드 하나만 깨운다. |
public void notifyAll() | 객체 자신을 사용하려고 기다리는 모든 쓰레드를 깨운다. |
public void wait() | 다른 쓰레드가 notify(), notifyAll()을 호출 할 때 까지 현재 쓰레드를 무한히 또는 지정된 시간(timeout, nanos)동안 기다리게 한다. |
public void wait(long timeout) | |
public void wait(long timeout, int nanos) |
equals(Object obj)
- 객체 자신(this)과 주어진 객체(obj)를 비교한다. (같으면 true, 다르면 false)
- Object클래스의 equals()는 객체의 주소를 비교 (참조변수 값 비교)
public boolean equals(Ojbect obj){
return (this ==obj);
}
equals(Object obj)의 오버라이딩
- 인스턴스 변수(iv)의 값을 비교하도록 equals()를 오버라이딩해야 한다.
class Person {
long id;
public boolean equals(Object obj){
if(obj instanceof Person) //obj가 Object타입이므로 id값을 참조하기 위해서는 Person타입으로 형변환 필요
return id == ((person)obj).id;
else
return false; // 타입이 Person이 아니면 값을 비교할 필요도 없다.
Person(long id) {
this.id = id;
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class Ex9_1 { public static void main(String[] args) { // TODO Auto-generated method stub 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; } // Object의 equals()를 오버라이딩해서 주소가 아닌 value를 비교 public boolean equals(Object obj) { // return this ==obj; //주소비교 . 서로 다른 객체는 항상 거짓 //참조 변수의 형변환 전에는 반드시 instanceof 로 확인 if(!(obj instanceof Value)) return false; Value v = (Value)obj; // obj를 value형변환 return this.value ==v.value; } } | cs |
반응형
댓글