Identity

It calls Referential equality.

  • In Java, we use the == to compare the identities of two objects. Notice that identity is something external. A reference is not part of the object it simply points to the object. Another important point is identity doesn't change over time: As I get older, I'm going through a lot of changes, but I'm still the same person.
  • In Kotlin, we use the ===(negated: !==). For values represented by primitive types at runtime (for example, Int), the === equality check is equivalent to the == check.

Equality

It calls Structural equality.

Equality refers to two objects being the same. Two objects being equal doesn't necessarily mean that they are the same object.

  • In Java, we use the equals() method to check if two objects are equal. This is also called structural equality.
  • In Kotlin, we use the ==(negated: !=). That same as equals() method in Java.
// a == b  is translated to in Kotlin:
a?.equals(b) ?: (b === null) // a == null will be automatically translated to a === null.

Floating-point numbers comparison

Floating-point numbers comparison - Kotlin Docs