동일성은 동일하다는 뜻으로 두 개의 객체가 완전히 같은 경우를 의미한다.
=> 즉, 두 객체가 사실상 하나의 객체로 봐도 무방하며, 주소 값이 같기 때문에 두 변수가 같은 객체를 가리키게 된다.
동등성은 동등하다는 뜻으로 두 개의 객체가 같은 정보를 갖고 있는 경우를 의미
=> 동등성은 변수가 참조하고 있는 객체의 주소가 서로 다르더라도 내용만 같으면 두 변수는 동등하다고 이야기할 수 있다.
equals 연산자
를 통해 판별할 수 있다.String str1 = new String("aaa");
String str2 = new String("aaa");
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
- 다른 String 객체를 메모리에 할당하였기에
-> str1과 str2가 가리키는 객체의 주소 값은 다르므로 동일하지 않다.- BUT! 🤔
String이 재정의한equals()
연산자에 의해 두 객체의 내용이 같으므로 동등하다고 할 수 있다.
.
.
==
연산자는 객체의 동일성을 판별하기 위해 사용하며, equals
연산자는 두 객체의 동등성을 판별하기 위해 사용한다.
equals()
연산자는 재정의하지 않으면 내부적으로 == 연산자와 같은 로직을 수행하므로 차이가 없다.
=> 따라서 equals()
연산자는 각 객체의 특성에 맞게 재정의를 해야 동등성의 기능을 수행한다.
steady-coding님의 글을 참조하여 작성하였습니다.