🌱 오늘의 주제 : Object클래스
🌱 Object클래스
🌱 Object클래스의 메서드 - equals()
- 매개변수로 객체의 참조변수를 받아서 비교하여 그 결과를 boolean값으로 알려주는 역할
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
🌱 Object클래스의 메서드 - toString()
- 인스턴스에 대한 정보를 문자열(String)로 제공할 목적으로 정의한 것이다.
public String toString() {
return getClass(). getName() + "@" + Integer.toHexString(hashCode());
- toString()을 오버라이딩 하지 않으면 위의 코드처럼 16진수의 해쉬코드를 얻는다.
🌱 toString()의 오버라이딩
- String클래스의 toString()은 String인스턴스가 갖고 있는 문자열을 반환하도록 오버라이딩이 되어있다.
- toString()은 일반적으로 클래스의 대한 정보 또는 인스턴스 변수들의 값을 문자열로 변환하도록 오버라이딩되는 것이 보통이다.
- 오버라이딩할 때는 조상의 정의된 접근범위와 같거나 혹은 더 넓어야 하기 때문에 주의해야 한다.
package Chapter9;
// toString()의 오버라이딩
class Card2{
String kind;
int number;
Card2() {
this("SPADE", 1); // Card(String kind, int number)를 호출
}
Card2(String kind, int number){
this.kind = kind;
this.number = number;
}
public String toString() { // 오버라이딩
return "kind : " + kind + ", number : " + number; // Card2 인스턴스의 kind와 number를 문자열로 반환.
}
}
public class Ex9_5 {
public static void main(String[] args) {
Card2 c1 = new Card2();
Card2 c2 = new Card2("HEAER", 10);
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
-----
kind : SPADE, number : 1
kind : HEAER, number : 10
'Java' 카테고리의 다른 글
Java - StringBuffer클래스 (0) | 2023.03.01 |
---|---|
Java - String클래스 (0) | 2023.02.28 |
Java - BufferedReader (0) | 2023.02.26 |
Java - 예외 되던지기, 연결된 예외 (0) | 2023.02.22 |
Java - 메서드에 예외 선언하기 (0) | 2023.02.21 |