3

I stumbled across some strange behaviour when comparing Java8 time objects. The below does not appear to be valid code.

val t1 = LocalTime.now()
val t2 = LocalTime.now()
val foo: Int = t1 > t2

Yet hovering over the undersquiggled code shows that the overridden function return type is correct:

enter image description here

Any ideas?

Ole V.V.
  • 81,772
  • 15
  • 137
  • 161
Vas
  • 2,014
  • 3
  • 22
  • 38
  • 2
    `t1 > t2` returns a boolean. The `>` operator uses `compareTo` under the hood, but it's not `compareTo`. – gpunto Apr 14 '22 at 23:22

1 Answers1

2

According to the documentation, when using the natively overloaded operators (comparison operators specifically) - Kotlin doesn't just call compareTo but rather performs a compareTo against 0 (thus ending up as a bool).

https://kotlinlang.org/docs/operator-overloading.html#comparison-operators

Comparison operators

Expression Translated to
a > b a.compareTo(b) > 0
a < b a.compareTo(b) < 0
a >= b a.compareTo(b) >= 0
a <= b a.compareTo(b) <= 0

All comparisons are translated into calls to compareTo, that is required to return Int.

The documentation snippet you attached is admittedly a bit confusing.

SJoshi
  • 1,866
  • 24
  • 47