---
description: 동일성과 동등성의 차이
---

# Identity and equality

## 동일성

동일성은 두 객체가 완전히 같은 객체인지, 즉 같은 메모리 주소를 가르키고 있는지를 의미합니다.

* 비교 방법: 자바에서 동일성을 확인할때는 '==' 연산자를 사용합니다. 두 객체의 참조(메모리 주소)를 비교하여, 같은 객체를 참조하고 있을 때 'True'를 반환합니다.



## 동등성

동등성은 두 객체가 논리적으로 같은지, 즉 내용이 동일한지를 의미합니다.

* 비교 방법: 자바에서는 'equals()' 메서드를 사용하합니다. 두 객체의 내용(논리적 동등성)이 동일하면, 'True'를 반환합니다.



#### **`==` 연산자와 `equals()` 메서드의 차이**:

* **`==` 연산자**:
  * 두 객체의 \*\*참조(메모리 주소)\*\*를 비교합니다.
  * 원시타입에서는 실제 값 자체를 비교하지만, 참조타입에서는 객체의 메모리 주소를 비교합니다.
* **`equals()` 메서드**:
  * 두 객체의 \*\*내용(논리적 동등성)\*\*을 비교합니다.
  * 자바의 `Object` 클래스에서 제공되는 메서드로, 기본적으로 객체의 참조를 비교하도록 구현되어 있지만, `String`, `Integer` 등은 이를 재정의하여 객체의 값을 비교할 수 있도록 합니다.



## 질문

Q. 자바에서 `String` 클래스의 `equals()` 메서드는 어떻게 동작하나요? 이 메서드는 어떤 방식으로 문자열의 동등성을 비교하며, 왜 `String` 클래스에서 `equals()` 메서드를 재정의했을까요?

**동작 원리**:

* `String` 클래스의 `equals()` 메서드는 먼저 비교 대상이 같은 타입(`String`)인지 확인합니다.
* 이후 두 문자열의 길이를 비교하고, 길이가 같다면 각 문자(char)들을 하나씩 비교합니다.
* 모든 문자가 동일하면 `true`를 반환하고, 하나라도 다르면 `false`를 반환합니다.

기본적으로 `Object` 클래스의 `equals()` 메서드는 두 객체의 \*\*참조(메모리 주소)\*\*를 비교합니다. 그러나 `String` 클래스에서는 **문자열의 내용**을 비교하는 것이 더 유용하기 때문에, 이 메서드를 재정의하여 문자열 비교를 보다 직관적으로 사용할 수 있게 합니다.



Q.&#x20;

