Object 클래스
모든 클래스의 최상위 클래스
즉, 모든 클래스는 Object를 상속 받는다.
객체 간 비교, 해시 값 생성, 문자열 표현 등을 위해 기본 메서드를 제공한다. // 11가지 기본 메서드
Object 타입으로 모든 객체를 참조할 수 있다.
Object 클래스 메서드
toString 메서드
객체 정보를 문자열로 반환하는 메서드 (출력 X)
객체정보는 "패키지이름.클래스이름@해쉬코드" 형식으로 표현 됨
일반적으로 하위 클래스에서 toString 메서드를 재정의해서 사용한다.
많은 표준 라이브러리 클래스에서 toString 메서드가 재정의 되어 있음
Ex) Wrapper, String, Collection
Wrapper 클래스의 경우 객체에 저장된 값을 반환 하도록 재정의
String 클래스의 경우 객체에 저장된 문자열을 반환 하도록 재정의
**
toString 메서드는 많이 사용하여 객체 이름으로만 호출이 가능하다.
obj.toString(), obj는 동일한 결과를 출력한다.
public String toString(){
return getClass().getName()+"@"+Integer.toHexString(hashCode());
}
equals 메서드
객체의 위치(주소, 번지)를 비교한다. "=="와 동일
사용자 정의 클래스의 객체를 비교하기 위해 equals() 메서드 재정의 필요
String, Wrapper 클래스는 equals() 메서드가 재정의되어 있음
Wrapper 클래스의 경우 객체에 저장된 값이 같은지 비교 하도록 재정의
String 클래스의 경우 객체에 저장된 문자열이 같은지 비교 하도록 재정의
public boolean equals((Object obj){
return (this==obj);
}
hashCode 메서드
해싱 기법에 사용되는 해시함수를 구현한 메서드
햄시함수가 찾고자 하는 값을 입력하면, 그 값이 저장된 위치를 알려주는 해시코드를 반환한다.
일반적으로 해시코드가 가튼 두 객체가 존재하는 것이 가능하지만,
Object 클래스에 정의된 hashCode 메서드는 객체의 주소값을 이용해서 해시코드를 만들어 반환하기 때문에
서로 다른 객체는 결코 동일한 해시코드 값을 가질 수 없다.
** 클래스의 인스턴스 값으로 객체의 같고 다름을 판단해야하는 경우
equals와 hashCode 메서드를 적절히 재정의 해야한다.
** System.identityHashCode(Object x)
Object 클래스의 hashCode 메서드처럼 객체의 주속밧으로 해시코드를 생성하므로
모든 객체에 대해 항상 다른 해시코드값을 반환
== 를 이용해서 같은지 판별할 수 있는 이유