DevBoi

[Java] ==와 equals 차이 본문

Language/[Java]

[Java] ==와 equals 차이

HiSmith 2022. 3. 29. 10:12
반응형

== 연산자는 기본타입의 데이터 값을 비교한다. 

객체나 레퍼런스 타입에 대해서는 주소값을 비교한다

 

사실 기본형도, Constant Pool에 있는 특정 상수를 참조하는 것이기 때문에,

결국 주소값을 보는 것이다. 같은 상수를 참조하면 주소값이 같기 때문에 동일하게 나오는 것이다.

 

 

equals는 최상위 클래스인 object에 포함되어있기 때문에 하위 클래스에서 재정의가 가능하다.

 

Object에서는 하위로, 주소값에 대한 비교만 한다. 

  public boolean equals(Object obj) {

        return (this == obj);

    }

 

 

추가로, String class에서는 이 equals에 대한 오버라이드를 하고있는데,

해당 부분에서 주소가 달라도 문자열이 같은경우 true로 되는 것이다.

주소가 같으면 true

길이가 같았을때, 두개의 char배열을 비교해서 같으면 true인 것이다.

 

해당 과 같은 원리로 String 에서 equals가 동작하게 된다.

 

 

결론

==는 주소값 비교 (기본형도 상수풀에서 같은 값을 가지면 같은 주소값을 가지기 때문에, 같다고 나온다)

equals는 주소 + 값 비교를 한다. 선언은 object에 정의되어있고 서브클래스에서 재정의하여 해당 메소드를 구현해놨다

반응형

'Language > [Java]' 카테고리의 다른 글

[Java] Vetor 개념 및 사용 방법  (0) 2022.03.29
[Java] Wrapper 클래스  (0) 2022.03.29
[Java] ArrayList  (0) 2022.03.25
[Java] TreeSet 이란? 동작과정  (0) 2022.03.25
[Java] LinkedHashSet  (0) 2022.03.25