package object;
class Student {
int studentNum;
String studentName;
public Student(int studentNum , String studentName) {
this.studentNum = studentNum;
this.studentName = studentName;
}
// System.out.println(Lee.equals(Shin)); 시 두 학생의 학번이 같으면 같은 학생이라는걸 equals() 로 재정의 한다.
@Override
public boolean equals(Object obj) {
// Object 로 넘어오면 업캐스팅 자동형변환이 되니까 그다음 다운캐스팅을 하게 한다
if(obj instanceof Student) { // 체크한다
Student std = (Student) obj; // 다운캐스팅을 한다.
// return (this.studentNum == std.studentNum);
if(this.studentNum == std.studentNum) // 같은 객체에 대한 논리적인 동일성 구현
return true;
}
return false;
}
}
public class EqualsTest {
public static void main(String[] args) {
/*
String str = new String("안녕");
String str2 = new String("안녕");
System.out.println(str);
System.out.println(str == str2); // == 는 메모리 주소가 같은가
System.out.println(str.equals(str2)); // 안에 있는 값이 같은가 문자열이 같으면 같은 것이다.
*/
Student Lee = new Student(100 , "이순신");
Student Lee2 = Lee; // 대입
Student Shin = new Student(100 , "이순신");
System.out.println(Lee == Lee2); // true
System.out.println(Lee == Shin); // false
System.out.println(Lee.equals(Shin)); // 논리적으로 같다는걸 재정의 해야하는데 두개의 객체가 같다는걸 재정의해야한다.
System.out.println(Lee); // 16진수 해시코드가 나오는데
System.out.println(Lee.hashCode()); // 10진수가 나온다.
System.out.println(Shin.hashCode());
System.out.println(Lee2.hashCode());
// 해시코드 값이 동일하려면 equals 값이 동일한 객체로 true값이 나오면 해시코드값이 같다는걸 알수있다.
}
}
'JAVA Programming' 카테고리의 다른 글
[53] Object 클래스의 Clone() 메소드 , finalize() 메소드 (0) | 2020.07.17 |
---|---|
[52] equals() 와 hashCode() 재정의 (0) | 2020.07.17 |
[50] 최상위 클래스 Object 클래스 , toString() 메소드 (0) | 2020.07.17 |
[48] 인터페이스 요소들 (0) | 2020.07.17 |
[45] 인터페이스 스케쥴러 , 다형성 (0) | 2020.07.16 |