Kotlin 中所有类都有一个共同的超类 Any ,如果类声明时没有指定超类,则默认为 Any 。我们来看一段代码:

也就是说,Any在运行时,其类型自动映射成java.lang.Object。我们知道,在Java中Object类是所有引用类型的父类。但是不包括基本类型:byte int long等,基本类型对应的包装类是引用类型,其父类是Object。而在Kotlin中,直接统一——所有类型都是引用类型,统一继承父类Any。

Any是Java的等价Object类。但是跟Java不同的是,Kotlin中语言内部的类型和用户定义类型之间,并没有像Java那样划清界限。它们是同一类型层次结构的一部分。

从Any的源码注释中,我们可以看到,判断两个对象是否相等,需要满足以下条件:

自反性:对于任何非空引用值x,x.equals(x) 应返回true。

对称性:对于任何非空引用值x和y,x.equals(y) 应返回true当且仅当y.equals(x) 返回true。

一致性:对于任何非空引用值x和y,多次调用x.equals(y) 始终返回true或者始终返回false。

另外,在Kotlin中,操作符==会被编译器翻译成调用equals() 函数。