My footsteps
hashCode, toString의 오버라이딩,Object클래스 본문
728x90
- 객체의 해시코드(주소?)를 int 형태로 반환하는 매서드
- equals()를 오버라이딩 하면 해시코드도 오버라이딩을 같이 해줘야한다. 이퀄스의 결과가 참이면 두 객체의 주소가 같아야 하기 때문에..
- 객체=iv 집합 이므로 객체를 문자열로 반환한다는것은 iv의값을 문자열로 반환한다는 것과 같음
class Card {
String kind;
int number;
//iv들
Card() {
this("SPADE", 1);
}
Card(String kind, int number) {
this.kind = kind;
this.number = number;
}
//오브젝트(Object.최고조상)클래스의 toString값을 오버라이딩 한것
public String toString() {
return "kind "+kind+", number "+number;
}
}
class Ex9_4 {
public static void main(String[] args) {
Card c1 = new Card();
Card c2 = new Card();
System.out.println(c1.toString());
System.out.println(c2.toString());
}
}
class Ex9_1 {
public static void main(String[] args) {
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는 다릅니다");
}
} //두 객체가 각각 따로라서 객체 주소값이 달라, 결과는 다릅니다가 나옴. 클래스 부분에서 오버라이딩 해줘야함
class Value {
int value;
Value(int value) {
this.value = value;
}
public boolean equals(Object obj) { //오버라이딩 매서드
//equals는 반환타입이 참,거짓이기 때문에 앞에 boolean형을 써준다
Value v = (Value)obj;
//오브젝트 리모컨에는 Value라는 버튼이 없기 때문에 형변환을 해줘서 버튼을 생성해준것.
return this.value==v.value;
//참,거짓 반환해야하니까 boolean은 리턴문씀
//this.value는 원조 value고 다른 value는 오브젝트의 value다.
}
}
하지만 참조변수의 형변환 전에는 반드시 instanceof로 형변환이 되는지 확인을 해야하니까,boolean문에
if ( ! (obj instanceof Value) ) return false;
만약 obj가 value로 형변환이 안된다면 거짓을 반환해라
class Person {
long id;
public boolean equals(Object obj) {
if(obj instanceof Person)
return id ==((Person)obj).id;
//(obj에는 id라는 버튼이 없으니 형변환을 통해 버튼 생성해준것.)person클래스가 가리키는 id랑,
//obj가 가리키는 id를 비교해서 같다면,
else
return false;
//둘 값이 같지 않다면,
}
Person(long id) { //long타입인 id변수를 가진 person매서드
this.id = id;
//person id와 obj id 구분을 위해 this씀.
}
}
class Ex9_2 {
public static void main(String[] args) {
Person p1 = new Person(8011081111222L); // long타입
Person p2 = new Person(8011081111222L);
//p1과 p2의 주민번호가 똑같다. 그래서 p1,p2 객체주소가 달라도 iv의 값으로 비교를 해서 같은 사람이라는 결과가 반환됨.
if(p1.equals(p2))
System.out.println("p1과p2는 같은 사람이다");
// 여기로 이동해서 같은 사람이다 라는값 나오고
else
System.out.println("p1과p2는 다른 사람이다");
// 여기로 이동해서 다른사람이다 라는 값 나오게.
}
}
728x90
'예습 > 이론' 카테고리의 다른 글
래퍼클래스,Number클래스,오토박싱&언박싱 (0) | 2023.01.22 |
---|---|
String클래스,StringBuffer클래스,StringBuilder,Math클래스 (0) | 2023.01.21 |
예외 (0) | 2023.01.20 |
내부클래스,익명클래스,예외처리,try-chtch문 (0) | 2023.01.19 |
참조변수의 형변환,instanceof,추상클래스 (0) | 2023.01.06 |