<aside> 📌 equals() 메서드

</aside>

<aside> 📌 hashCode() 메서드

</aside>

Untitled

<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>