하지만 모든 수 타입의 값은 서로 <, <=, >, >=를 사용해 비교할 수 있다. 이는 수 타입 사이의 산술 연산이 가능한 모든 경우를 다룰 수 있도록 오버로딩(overloading)된 것과 마찬가지다. 따라서 다음과 같은 코드를 작성할 수 있다.4
1 <= 2L || 3 > 4.5
Char와 Boolean 값도 비교 연산을 지원한다. 하지만 같은 타입의 값과만 비교할 수 있다.
false == true // false false < true // true false > 1 // Error: comparing Boolean and Int 'a' < 'b' // true 'a' > 0 // Error: comparing Int and Char
false가 true보다 작다고 가정하고, Char는 문자의 코드 값에 따라 비교된다는 점을 기억하라.
자바 vs. 코틀린 자바에서는 박싱된 값과 언박싱된 값이 서로 다른 타입으로 표현됐고(예 long과 Long), 원시 타입의 값을(char도 포함) 자유롭게 서로 ==, !=나 <, <=, >, >=로 비교할 수 있었다. 하지만 자바의 불 값은 순서(대소관계)가 없기 때문에 두 불 값에 대해서는 동등성 비교만 적용할 수 있다.
부동소수점 타입 비교 연산은 IEEE 754 표준을 따른다. 특히 이 표준은 NaN 값을 특별히 취급한다.
println(Double.NaN == Double.NaN) // false println(Double.NaN != Double.NaN) // true println(Double.NaN <= Double.NaN) // false println(Double.NaN < Double.POSITIVE_INFINITY) // false println(Double.NaN > Double.NEGATIVE_INFINITY) // false