
Object
모든 클래스의 최상위 클래스
아무것도 상속받지 않으면 자동으로 object 를 상속받기 때문
이 말은 object 가 갖고 있는 메서드는 모든 클래스에서 사용 가능
object 는 같은 값인지 다른 값인지 비교하는 메서드는 제공하고 있지만 오버라이딩해서 기준을 정하는 것은 사용자가 해야한다.
기준을 제공해주지 않으면 아래처럼 같은 값도 다르다고 나오기 때문이다.
import java.util.Objects;
public class ObjectOverriding {
String name;
String studentId;
int birthYear;
public static void main(String[] args) {
ObjectOverriding student1 = new ObjectOverriding();
student1.name = "Sara";
student1.studentId = "102345";
student1.birthYear = 2004;
ObjectOverriding student2 = new ObjectOverriding();
student2.name = "Sara";
student2.studentId = "102345";
student2.birthYear = 2004;
if(student2.equals(student1)){
System.out.println("TRUE");
}
else {
System.out.println("FALSE");
}
}
}

실제로 student1 과 student2 의 이름, 학번, 출생 년도 모두 같지만 다르다고 나왔다.
이런 경우 기준을 정해주어야 한다.
어떤것이 같아야 같다고 반환할 것인지를 정해야 한다는 소리이다.
코드를 작성하지 않아도 인텔리제이 기준 마우스 우클릭으로 해결 가능하다.
우클릭 > Generate > equals and HashCode 를 선택하면 된다.

선택하면 equals( ) 에서 어느것을 기준으로 할 것인지 체크하는 창이 나온다.
이름만 같으면 같다고 할 것인지, 이름과 학번 둘 다 같아야 같다고 할 것인지 본인 선택에 따라 체크해주면 된다.
체크 한 후에는 자동으로 오버라이딩한 코드가 생성된다.
나는 이름, 학번, 출생년도 모두 같아야 같은 학생이라고 선택했다.
import java.util.Objects;
public class ObjectOverriding {
String name;
String studentId;
int birthYear;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
ObjectOverriding that = (ObjectOverriding) o;
return birthYear == that.birthYear && Objects.equals(name, that.name) && Objects.equals(studentId, that.studentId);
}
@Override
public int hashCode() {
return 0;
}
public static void main(String[] args) {
ObjectOverriding student1 = new ObjectOverriding();
student1.name = "Sara";
student1.studentId = "102345";
student1.birthYear = 2004;
ObjectOverriding student2 = new ObjectOverriding();
student2.name = "Sara";
student2.studentId = "102345";
student2.birthYear = 2004;
if(student2.name.equals(student1.name)){
System.out.println("TRUE");
}
else {
System.out.println("FALSE");
}
}
}

이런 식으로 HachCode( ) 와 toString( ) 도 비교 가능하다.