코틀린에서는 == 연산자가 기본이다. Primitive Type(원시 타입)을 비교할 때는 피연산자의 값이 같은지 비교한다. 하지만, Reference Type(참조 타입)을 비교할 때는 다르다.
== 는 내부적으로 equals를 호출한다. 따라서 참조 타입인 2개의 String을 == 연산으로 비교하면 주소값이 아닌 값(동등성) 비교를 한다.
val a : String = "hi"
val b : String = "hi"
println(a == b) // true
그렇다면, 참조 타입의 주소값을 비교하고 싶다면 어떻게 하면 될까?
코틀린에서는 자바에서 없는 === 이라는 연산자를 지원한다. 참조 비교를 위해서 === 연산자를 사용하면 주소값을 비교할 수 있다.
자바에서는 Primitive Type(원시 타입)을 비교하기 위해 == 를 사용한다. == 는 두 피연산자의 값이 같은지를 비교한다. 즉, 동등성 비교를 한다.
int a = 1;
int b = 2;
System.out.println(a == b); // false
한편, 참조 타입인 두 피연산자 사이에 == 를 사용할 경우, 주소값을 비교하게 된다. String의 경우, Reference Type이기 때문에 내용이 같더라도 주소값이 다를 경우 false를 반환하게 된다.
String a = "hi";
String b = "hi";
System.out.println(a == b); // false
두 참조 타입(객체)의 동등성을 확인하기 위해서는 equals를 호출해야 한다.
String a = "hi";
String b = "hi";
System.out.println(a.equals(b)); // true