IT's 우

[Java] == 와 equals 차이 본문

CS/Java

[Java] == 와 equals 차이

디우 2023. 6. 15. 02:54
728x90

backtony 씨의 답안

📌
==
- 참조 비교로 두 객체가 같은 메모리 공간을 가리키는지 확인

equals
- 두 객체의 내부 값이 같은지 내용을 비교한다.
- 기본 타입(Primitive Type)에 대해서는 적용할 수 없다.
- 객체 비교 시 override 해서 원하는 방식으로 수정할 수 있다.

자바의 최상위 클래스는 Object 클래스이다. Object 클래스에는 기본적으로 equals(), hashCode(), toString(), clone(), notify()등 여러 메서드가 존재


== 연산자

  • primitive type 에 대해서는 값을 비교. reference type에 대해서는 주소값을 비교
    • 사실 primitive type도 Constant Pool에 있는 특정 상수를 참조하는 것이기 때문에 결국 주소값을 비교하는 것으로 볼 수 있다. 같은 상수를 참조하면 주소값이 같으니 결국 같은 값이면 동일하다고 판단할 수 있다.

equals()

→ 동일한 리터럴 값을 가지냐를 판단

Object 클래스의 메서드이고 이는 == 연산자와 동일하게 주소값을 비교를 수행하는 메서드입니다. 흔히 우리가 문자열 비교를 위해 사용하는 equals()의 경우 String 클래스에서 오버라이딩을 함으로써 문자열 간의 비교가 가능해졌습니다.

String.equals() 사용 시 주의할 점(NullPointException)

메서드의 파라미터로 String 타입을 받더라도 null 을 검증하는 부분이 없기 때문에. equals() 메서드를 사용하면 **NullPointerException**이 터질 수 있습니다. ( equals()의 인자는 null이라도 NullPointerException 이 발생하지 않습니다.) 이럴 경우엔 위에서 언급한 Object.equals() 를 사용하여 두 객체를 비교할 수 있습니다. 그 이유는 Object.equals() 내부에서 자체적으로 param 값이 null 인지 체크하기 때문입니다.


출처

https://github.com/backtony/Backend_Interview_for_Beginner/blob/master/Java.md

https://go-coding.tistory.com/35

728x90
반응형

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

[java] 추상 클래스와 인터페이스 차이  (0) 2023.07.14
[java] final vs finally vs finalize  (0) 2023.06.30
[Java] String vs Char 차이  (1) 2023.06.15
[Java] Object 클래스  (0) 2023.06.01
[Java]문자열 클래스  (0) 2023.06.01