게으른 개발자의 끄적거림

Java equals()와 == 차이점

끄적잉 2023. 10. 12. 22:21
반응형

   equals()와 == 차이점

Java에서 `==` 연산자와 `equals()` 메소드는 객체 비교에 사용되는 두 가지 다른 방법입니다. 이 두 가지 방법 사이의 주요 차이점은 다음과 같습니다:

1. `==` 연산자:
   - `==` 연산자는 객체의 참조(메모리 주소)를 비교합니다.
   - 두 객체가 정확히 동일한 메모리 위치를 가리키는 경우에만 `true`를 반환합니다.
   - `==` 연산자는 기본 데이터 유형에 대해서는 값 비교를 수행하고, 참조 데이터 유형(객체)에 대해서는 참조 주소 비교를 수행합니다.

2. `equals()` 메소드:
   - `equals()` 메소드는 객체의 내용(데이터)을 비교합니다.
   - 기본적으로 Java의 `Object` 클래스에서 상속되는 `equals()` 메소드는 `==` 연산자와 동일하게 동작하여 객체의 참조를 비교합니다.
   - 하지만 많은 Java 클래스(예: `String`, `Integer`, `Double` 등)는 `equals()` 메소드를 오버라이드하여 객체의 내용을 비교하도록 수정했습니다.

예시:


String str1 = new String("Hello");
String str2 = new String("Hello");

System.out.println(str1 == str2); // false (참조 주소 비교)
System.out.println(str1.equals(str2)); // true (내용 비교)


위의 예시에서, `str1`과 `str2`는 서로 다른 메모리 위치를 가리키지만 `equals()` 메소드를 사용하여 내용을 비교하면 `true`를 반환합니다.

따라서, 일반적으로 객체 내용을 비교하려면 `equals()` 메소드를 사용하고, 객체 참조를 비교하려면 `==` 연산자를 사용해야 합니다. 그러나 주의해야 할 점은 `equals()` 메소드를 오버라이드하지 않은 경우에는 기본적으로 `==` 연산자와 동일한 동작을 수행한다는 것입니다.

반응형