두 개의 오브젝트가 완전히 동일한 것을 의미합니다.
하나의 오브젝트만 존재하는 것이며 그 오브젝트를 참조하는 여러 개의 레퍼런스 변수를 갖고 있는 것을 의미합니다.
동일한 정보를 가지고 있는 오브젝트를 의미합니다.
메모리상에 각기 다른 오브젝트가 존재하는 것이며 각 오브젝트의 기준에 따라 동등하다고 판단합니다.
Kotlin에서는 Java와 달리 ==를 사용시 내부적으로 equals를 호출합니다.(동등성 검사)
주소 값을 비교하고 싶다면 ===을 사용합니다.(동일성 검사)
Java
String a = new String("hello world"); // 주소값 1
String b = new String("hello world"); // 주소값 2
System.out.println(a==b); // false
System.out.println(a.equals(b)); // true
Kotlin
val a : String = "hello world"
val b : String = "hello world"
println(a == b) // true
println(a === b) // true
String 객체는 String pool이라는 힙의 영역이 따로 존재하여 값을 String pool에 저장합니다. 만약 이미 String pool에 같은 값이 존재한다면 같은 주소를 참조하는 방식으로 동작합니다. 그래서 true값을 반환하는 것입니다.