<aside> 📌 equals() 메서드
</aside>
true/false
**를 반환시킨다.
==
: 이 비교는 주소값만을 비교한다.<aside> 📌 hashCode() 메서드
</aside>
<aside> 📌 equals()와 hashCode()는 페어다
</aside>
<aside> 📌 예시코드
</aside>
public class Student {
private int studentNum;
private String studentName;
public Student(studentNum, studentName) {
this.studentNum = studentNum;
this.studentName = studentName;
}
public String toString() {
return studentNum + "," + studentName;
}
// equals를 override해서 구현해 준다.
@Override
public boolean equals(Object obj) {
if(obj instanceOf Student) {
Student std = (Student)obj; // 다운캐스팅 해준다.
// 여기서 값이 같은지 비교한다.(여기선 int값 비교다.)
if(this.studentNum == std.studentNum){
return true;
} else {
return false;
}
}
}
@Override
public int hashCode() {
// 학번이 같을때는 같은 학번을 반환하도록 이렇게 작성한다.
return studentNum;
}
}
public class EqualsTest {
public static void main(String[] args) {
Student std1 = new Student(100, "Lee");
Student std2 = new Student(100, "Lee");
Student std3 = std1;
// 이렇게 하면 당연히 다른객체(주소가 다름)니까 false가 나온다.
System.out.println(std1 == std2);
// 이렇게 해도 주소값을 비교하니까 false가 나온다. -> hashCode() 작성후에는 true 출력으로 변함
System.out.println(std1.equals(std2));
// 이렇게 하면 당연히 std3 = std1;으로 같은 주소를 바라보도록 했으니 true가 나온다.
System.out.println(std1 == std3);
System.out.println(std1.hashCode()) // 917142466 -> hashCode()작성후 100 출력
System.out.println(std2.hashCode()) // 1993134103 -> hashCode()작성후 100 출력
String str1 = new String("abc")
String str2 = new String("abc")
System.out.println(str1.equals(str2)); // 얘는 true로 나온다.
System.out.println(str1.hashCode()); // 96354
System.out.println(str2.hashCode()); // 96354
Integer i = 100;
System.out.println(i.hashCode()); // 100
// hashcode를 바로 출력해주는 static함수로 확인해보자
// 두개의 값은 다른값이 나온다. -> 얘들은 실제값을 출력하고 위에서 override한건 가상값을 출력하는것이다.
System.out.println(System.identityHashCode(std1));
System.out.println(System.identityHashCode(std2));
}
}
<aside> 📌 clone() 메서드
</aside>