본문 바로가기

Java/Java

(JAVA) equals에 대해서(1)

Object는 객체를 만들 수 있는 구체 클래스이지만 기본적으로 상속을 사용해서 사용하도록 구현되어있다.
내부 메소드 : equals, hashCode, toString, clone, finalize
일반규약이 명확하게 정의되어있다. 이말은 이러한 규약에 맞지않게 사용한다면 기대하는 결과와 다른 결과가 나온다.
ex) HashMap, HashSet

 

== 과 .equals()의 차이

==과 .equals()의 주된 차이는 보이는바와 같이 == 은 연산자이고 .equals()는 메소드라는 점이다.

 

==은 참조하는 객체의 주소를 비교하고 (address comparison) .equals()는 객체의 값(content comparison)을 비교한다.

 

다만 .equals()는 값을 비교하기 이전에 == 비교를 통해서 주소 값을 비교하고 그 이후에 해당 객체에 대한 값을 비교한다.

 

https://blog.naver.com/gngh0101

 

호식이 : 네이버 블로그

@hotire - GS ITM (2017.02 ~ 2018.03) - Kakao (2018.07 ~ 2019.11) - LINE (2019.12 ~ ) https://github.com/hotire

blog.naver.com


만일 클래스에서 .equals()를 재정의하지 않았다면 어떻게 될까?

가장 가까운 부모에서 재정의된 .equals()를 사용한다.

 

public class EqualsEx {
    public static void main(String[] args) {
        String s1 = new String("hello");
        String s2 = new String("hello");

        System.out.println(" == 비교 :: " + (s1 == s2));
        System.out.println("equals 비교 :: " + s1.equals(s2));

    }
}

실행결과

이러한 결과가 나온 이유에 대해서 살펴보자

 

s1, s2는 각기 다른 객체들이다.

== comparison을 할때 false가 나오는 이유는 힙영역의 각기 다른 주소값을 가지기 때문이다.

 

.equals()는 이전에 언급하였드시 값을 비교하기 때문에 true가 리턴되는 것이다.


References

이펙티브 자바 Effective Java 3/E
국내도서
저자 : 조슈아 블로크(Joshua Bloch) / 이복연(개앞맵시)역
출판 : 인사이트 2018.11.01
상세보기

 

https://www.geeksforgeeks.org/difference-equals-method-java/

 

Difference between == and .equals() method in Java - GeeksforGeeks

In general both equals() and “==” operator in Java are used to compare objects to check equality but here are some of the differences between… Read More »

www.geeksforgeeks.org

 

'Java > Java' 카테고리의 다른 글

(JAVA) autoBoxing , unBoxing의 이해  (1) 2020.02.03
(JAVA) equals에 대해서(2)  (0) 2020.01.31
(JAVA) Integer Cache  (0) 2020.01.29
(JAVA) wait() 와 notify()  (0) 2020.01.26
(JAVA) 쓰레드 동기화  (0) 2020.01.25