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.

Last updated