java.lang 패키지
- 자바프로그래밍에 가장 기본이 되는 클래스들을 포함
- import문 없이 사용 가능
- ex) String클래스, System클래스
Object 클래스
- 모든 클래스의 최고 조상
→ Object클래스의 멤버들은 모든 클래스에서 바로 사용 가능
equals(Object obj)
- 매개변수로 객체의 참조변수를 받아서 비교
- 결과는 boolean값으로 알려준다
- 참조변수의 값(주소값)으로 비교한다. →결과는 항상 false
- 객체를 생성할 때, 메모리의 비어있는 공간을 찾아 생성하므로 서로 다른 두 개의 객체가 같은 주소를 갖는 일은 없다.
// 객체 자신과 객체 obj가 같은 객체인지 비교(같을경우 true 반환)
public boolean equals(Object obj){
return (this==obj); // 주소 비교
}
- 실제 인스턴스의 내용을 비교하기 위해서는 equals 메서드를 오버라이딩(재정의) 해야한다.
public boolean equals(Object obj){ // 같은 객체를 가리키도록 재정의
if(ojb != null && obj instanceof 타입)
// obj가 Object타입이므로 변수값을 참조하기 위해서는 타입으로 형변환 필요
return 참조변수 == ((타입)obj).참조변수;
else
return false;
}
class Person {
long id;
public boolean equals(Object obj) {
if (obj instanceof Person)
// obj가 Object타입이므로 id값을 참조하기 위해서는 Person타입으로 형변환 필요
return id == ((Person)obj).id;
else // 타입이 Person이 아니면 값을 비교할 필요도 없다.
return false;
}
Person(long id) {
this.id = id;
}
}
class EqualsEx2 {
public static void main(String[] args) {
Person p1 = new Person(8011081111222L);
Person p2 = new Person(8011081111222L);
if (p1==p2) // 주소값 비교
System.out.println("p1과 p2는 같은 사람입니다.");
else
System.out.println("p1과 p2는 다른 사람입니다.");
if (p1.equals(p2))
// id == ((Person)obj).id -> 8011081111222L == 8011081111222L
System.out.println("p1과 p2는 같은 사람입니다.");
else
System.out.println("p1과 p2는 다른 사람입니다.");
}
}
//실행결과
//p1과 p2는 다른 사람입니다.
//p1과 p2는 같은 사람입니다.
- String 클래스의 equals 메서드
- 내용(문자열 값)을 비교하도록 오버라이딩 되어 있다.
- 그러나 StringBuffer 클래스는 오버라이딩 되어 있지 않다.
- Date, File, wrapper클래스(Integer, Double 등)의 equals 메서드도 내용을 비교하도록 오버라이딩 되어 있다.