본문 바로가기

PL(ProgrammingLanguage)/JAVA

java.lang.Object

 

 

Object 클래스

 

클래스를 선언할 때 extends 키워드로 다른 클래스를 상속하지 않더라도 

암시적으로 java.lang.Object 클래스에 상속하게 된다.

 

따라서

 

자바의 모든 클래스는 

Object 클래스의 '자식이거나 자손 클래스'이다.

 

 

즉, Object는 자바의 '최상위' 부모 클래스에 해당.

 

 

 


 

 

 

1) 객체비교 equals()

 

equals()  메소드의 매개 타입은 Object.

이것은 모든 객체가 매개값으로 대입될 수 있음을 말한다.

 

why?

 

그 이유는 모든 객체는 Object 타입으로 자동 타입 변환이 될 수  있기 때문!

 

 

Object 클래스의 equals()는 비교 연산자인  ==과 동일한 결과를 리턴

 

두 객체가 동일한 객체라면 true,

다른 객체라면 false를 리턴

 

Object obj1 = new Object();
Object obj2 = new Object();

boolean result = obj1.equals(obj2);
         //기준객체.equals(비교객체)
boolean result = (obj1 == obj2);

// 결과가 동일

 

 

논리적으로 동등하다는 것은

같은 객체이건 다른 객체이건 상관없이 객체가 저장하고 있는 데이터가 동일함은 뜻한다.

 

 

예) String 객체의 equals() 는 String 객체의 번지(Heap)를 비교하는 것이 아니고,

'문자열'이 동일한지 비교해서  같다면 true, 다르다면 false 를 리턴한다.

 

 

이것이 가능한 이유는 

String 클래스가 Object의  equals() 를 오버라이딩(재정의)해서

번지 비교가 아닌 문자열 비교로 변경했기 때문이다.

 

 

 

 


 

 

 

2) 객체 해시코드 hashCode()

 

: 객체를 식별하는 하나의 정수 값

Object 클래스의 hashCode()는 객체의 메모리 번지를 이용해서 

해시코드를 만들어 리턴하기 때문에 객체마다 다른 값을 가지고 있다.

 

논리적 동등 비교시 hashCode()를 오버라이딩할 필요가 있는데,

컬렉션 프레임워크에서 HashSet, HashMap, Hashtable은

다음과 같은 방법으로 두 객체가 동등한지 비교한다.

 

hashCode()

 

 

hashCode() 실행 -> 리턴된 해시코드 값이 같은지 비교

 

- 해시코드 값이 다르면 다른객체로 판단

- 해시코드 값이 같으면 equals()로 다시 비교

 

그렇기 때문에 hashCode()가 true로 나와도 equals()의 리턴 값이 나와도 다르면 다른 객체가 된다.

 

 

 

'PL(ProgrammingLanguage) > JAVA' 카테고리의 다른 글

array  (0) 2021.09.04
for문  (0) 2021.09.04
Java.lang 패키지  (0) 2021.08.03
간단 용어 정리  (0) 2021.07.31
컴퓨터의 단위  (0) 2021.07.31