2.2.8 비교와 동등성
지금까지 언급한 모든 타입은 몇 가지 비교 연산을 제공한다. ==(같다), !=(같지 않다), <(~보다 작다), <=(~보다 작거나 같다), >(~보다 크다), >=(~보다 크거나 같다)가 비교 연산이다.
val a = 1 val b = 2 println(a == 1 || b != 1) // true println(a >= 1 && b < 3) // true println(a < 1 || b < 1) // false println(a > b) // false
일반적으로 동등성 연산인 ==와 !=를 모든 타입의 값에 적용할 수 있다. 하지만 수 타입이나 Char와 Boolean의 경우 예외가 있다. 다음 코드를 보라.
val a = 1 // Int val b = 2L // Long println(a == b) // Error: comparing Int and Long println(a.toLong() == b) // Ok: 두 타입 모두 Long임
기본적으로 이런 코틀린 타입은 두 인자가 모두 같은 타입일 때만 ==와 !=를 허용한다. 예를 들어 한 인자가 Int이고 다른 인자가 Long이면 ==를 적용할 수 없다. 값이 박싱돼 있는지에 따라 동등성 연산이 다른 결과를 낳을 수 있는데, 코틀린에서는 박싱이 암시적으로 진행되기 때문에 (자바 원시 타입에 해당하는 박싱이 될 수 있는 코틀린) 타입 사이의 동등성 연산을 허용하면 혼란을 야기할 수 있기 때문이다.