본문 바로가기
전공수업/JAVA

[Java] ==, equals(), hashcode() 란?

by Alkaloid 2021. 5. 17.
반응형
반응형

==, equals(), hashcode()

위 세개의 공통점은 객체가 동일한지 확인 할 수 있다.

 

1. == 

==는 연산자로 사용이 된다.

결과는 true or false로 리턴을 하며, 같은 것을(주소) 가르킬때 true를 반환한다.

 

예를 들어서

a= 10 ;

b= 10;

c= new 10;

각각 존재할때 a,b는 heap에 생성된 10을 가르킨다.

하지만 c같은 경우는 새로운 객체를 만들었고, 자신의 메모리에 10을 저장하기 때문에 다른 것을 가르킨다.

a==b true

a==c false

 

 

2. equals()

equals()는 내용이 같은지 검사하는 메소드이다.

위 ==연산자와 다른 점은 같은 객체를 가르키지 않아도 true가 될수 있다.

 

위의 예제에서 보면 a와b는 같은 주소, c는 다른 주소를 가지고있다. (서로 다른 주소이기 때문에 다른 객체이다.)

하지만 내용으로만 봤을때는 a,b,c모두 10을 가지고 있기 때문에 true를 반환한다.

 

하지만 equals()를 사용한다고 해서 값이 같은 경우 true를 반환 받지는 않는다.

예를 들어서

a(10,n)와 b(10,n)이 존재할때,

1. 10과n이 같을때, 두객체가 같다고 판단을 할지

2. 10만 같을때, 두 객체가 같다고 판단을 할지

3. n만 같을때 두 객체가 같다고 판단을 할지 

잘 모르기 때문이다.

 

 

 

3.hashcode() 

equals()을 재정의 할때 반드시 hashcode()를 함께 재정의 해야한다.

hashcode()는 메모리에서 가진 hash주소 값을 기본적으로 반환해준다.

주의해야할 점은 hashcode()는 다른 객체여도 같을 수 있다.

 

new a(10,n)와 new b(10,n)이 존재할때, 각각의 hashcode는 다를 것이다. a=1111, b=2222로 가정하겠다.

하지만 equals()를 하게되면, 객체는 다르더라도 내용은 같기 때문에 true를 반환 할것이다.

그리고 collection인 map에 해당 객체를 넣었을 경우, map의 size를 보면 2라고 되어있을 것이다.

 

즉, equals()로 객체가 같다면 hashcode()도 같아야한다. 

반대로 hashcode()가 같다고 equals()가 같은 객체가 아닐수 있다.

반응형

'전공수업 > JAVA' 카테고리의 다른 글

[JAVA] 기초 문법 - LIST(KEY,VALUE) 키 값 출력(꺼내기)  (0) 2022.12.02
[JAVA 기초] 자바 생성자 설명  (0) 2022.01.26
[JAVA / 자바] 알고리즘 공부(메소드)  (0) 2021.05.23
객체지향?  (0) 2018.07.21
JAVA_Array_(1)  (0) 2018.07.20