모든 클래스들의 최고 조상
객체의 참조변수를 받아 비교하는 메서드
public boolean equals(Object obj) {
return (this == obj);
}
- Object에서의 equal은 == 에 의해 판단된다.
-> 이는 참조변수의 값을 비교함으로써 판단한다.
사진으로 보면, 두 참조변수의 뿌리가 같은지 확인하는 과정이 equal의 로직인 것을 확인할 수 있다.
Object의 hashCode 메서드
@HotSpotIntrinsicCandidate
public native int hashCode();
- 해싱?: 데이터관리기법 중 하나. 다량의 데이터를 저장하고 검색
- 같은 객체라면? hashCode메서드를 호출했을 때 결과값인 해시코드도 같아야한다.
+ native메서드
자신을 복제하여 새로운 인스턴스를 생성하는 메서드
int[] arr = [1, 2, 3, 4, 5];
int[] arrClone = arr.clone();
- 단순히 멤버변수의 값만 복사한다.
- 배열이나 인스턴스가 멤버로 정의되어 있는 클래스의 인스턴스는 완전한 복제가 불가능하다!
-> 복제된 인스턴스도 같은 주소를 갖기 때문에 원래의 인스턴스에 영향을 미친다.
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int[] arrClone = arr.clone();
System.out.println(arr); //[I@2d6e8792
System.out.println(arr.clone()); //[I@2812cbfa
System.out.println(arrClone); //[I@2acf57e3
arrClone[1] = 0;
System.out.println(arr[1]); // 2
System.out.println(arrClone[1]); // 0
}
-> 배열도 객체이기 때문에 Object를 상속 받고, Coneable과 Serializable을 구현하였기 때문에 clone()을 통해 복제가 가능하다.
-> 해당 복제본은 원본과 다르다!