public boolean equals(Object obj) { return (this == obj) // 주소 비교 }
package Chapter9;
public class Ex9_1 {
public static void main(String[] args) {
// object클래스의 메서드 -equals()
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는 다릅니다.");
}
} // main
}
class Value {
int value;
Value(int value) {
this.value = value;
}
}
-----
v1과 v2는 다릅니다.
🌱 equals() 의 오버라이딩
equals()를 오버라이딩하여 주소가 아닌 객체에 저장된 내용을 비교하도록 변경
String 클래스에는 Object 클래스로부터 equals() 메서드를 상속받아문자열 내용을 비교하도록 이미 오버라이딩 되어 있다.
package Chapter9;
class Person {
long id;
// equals()의 오버라이딩
public boolean equals (Object obj) {
if(obj instanceof Person)
return id == ((Person)obj).id; // obj가 Object 타입이므로 id값을 참조하기 위해서는 Person타입으로 형ㅂ면환이 필요하다.
else
return false; // 타입이 Person이 아니면 값을 비교할 필요도 없다.
}
Person(long id){
this.id = id;
}
}
public class Ex9_2 {
public static void main(String[] args) {
Person p1 = new Person(11);
Person p2 = new Person(11);
if(p1.equals(p2)) {
System.out.println("p1과 p2는 같은 사람입니다.");
} else {
System.out.println("p1과 p2는 다른 사람입니다.");
}
} // main
}
------
p1과 p2는 같은 사람입니다.
🌱Object클래스의 메서드 - hashCode()
Object클래스의 hashCode()는 객체의 주소를 int로 변환해서 반환
객체의 주소값을 이용해서 해시코드를 만들어 반환
String클래스는 문자열이 같으면, 동일한 해시코드를 반환하도록 hashCode메서드가 이미 오버라이딩 되어 있다.
equals()를 오버라이딩하면, hashCode()도 오버라이딩 해야한다.
package Chapter9;
public class ex9_4 {
public static void main(String[] args) {
// Object클래스의 메서드 - hashCode()
String str1 = new String("abc");
String str2 = new String("abc");
//String 클래스에는 Object 클래스로부터 equals() 메서드, hashCode메서드를 상속받아
//문자열 내용을 비교하도록 이미 오버라이딩 되어 있다!
System.out.println(str1.equals(str2));
System.out.println(str1.hashCode());
System.out.println(str2.hashCode());
System.out.println(System.identityHashCode(str1)); // identityHashCde : 객체의 주소값으로 해시코드를 생성.
System.out.println(System.identityHashCode(str2));
}
}
------
true
96354
96354
1450495309
1670782018