Engineering Note

[Java] 동일성(Identity)과 동등성(Equality) 본문

Programming Language/Java

[Java] 동일성(Identity)과 동등성(Equality)

Software Engineer Kim 2025. 12. 23. 11:48

1. 개요

  • 동일성 : 두 객체가 메모리상에서 같은 주소를 가리키고 있는가?(완전히 같은 인스턴스인가?)
  • 동등성 : 두 객체가 주소는 다르더라도 들고 있는 값이 같은가?

 

2. Java 연산자를 통해 알아보는 동일성과 동등성

1. a == b (동일성 비교)

'== '연산자는 비교하고자 하는 대상의 주소값(Refrence)을 직접 비교합니다.

 

기본 타입(int, boolean) : 변수에 실제 값이 직접 저장되므로, 값 자체가 같은지 비교합니다.

참조 타입(String, Object) : 객체가 저장된 메모리 주소를 비교합니다. 아무리 내용이 같아도 서로 다른 메모리 공간에서 생성되었다면, false를 반환합니다.

 

정리하면 Java에서 주소가 같아야 진짜 같은 객체다.

 

 

 

2. a.equlas(b) (동등성 비교)

equals() 메서드는 객체의 내용(값)이 같은지 비교하기 위해 사용합니다.

 

기본동작: Object 클래스에 정의된 원래의 equals()는 사실 '=='와 똑같이 설계되어 있습니다.

 

재정의(Overriding) : String, Interger 같은 클래스는 사용자가 내용만 같으면 true로 반환

 

문자열 비교시 equals()를 사용하는 이유는 인스턴스가 다른 인스턴스라도 값이 값으면 true를 얻기 위해서 사용한다.

 

 

String s1 = new String("Java");
String s2 = new String("Java");

System.out.println(s1 == s2);      // false (주소가 다름)
System.out.println(s1.equals(s2)); // true  (글자 내용이 같음)
Comments