본문 바로가기

복습

[Java 복습] Object 클래스

Object 클래스

모든 클래스의 최고 조상!! (호호 할아버지)

오직 11개의 메서드만을 가지고 있다.

notify(), wait() 등은 쓰레드와 관련된 메서드이다.

 

 

equals(Object obj) 오버라이딩

객체 자신(this)과 주어진 객체(obj)를 비교한다. 같으면 true, 다르면 false.

Object 클래스의 equals( )는 객체의 주소를 비교(참조변수 값 비교)

public class Equals {

    public static void main(String[] args) {
        Value v1 = new Value(10);
        Value v2 = new Value(10);

        System.out.println(v1.equals(v2));

    }
}

class Value {
    int value;

    Value(int value) {
        this.value = value;
    }

    @Override
    // 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;
    }
}
class Person {
    long id;

    @Override
    public boolean equals(Object obj){
        if (obj instanceof Person) {
            Person p = (Person) obj;
            return this.id == p.id;
        }
        return false;
    }

    @Override
    public String toString() {
        return "id: " + id;
    }
    Person(long id) {
        this.id = id;
    }
}
public class PersonTest {
    public static void main(String[] args) {
        Person p1 = new Person(0001303L);
        Person p2 = new Person(0001303L);

        if (p1.equals(p2)) {
            System.out.println("p1과 p2는 같은 사람입니다.");
        } else {
            System.out.println("p1과 p2는 다른사람 입니다.");
        }
    }
}