没有任何==对象

下面的代码在kotlin中:

Any().javaClass 

具有java.lang.Object值。 这是否意味着AnyObject是相同的类? 他们有什么关系?

没有。

从Kotlin文档 (Emphasis我的文档 )

Kotlin中的所有类都有一个公共超类Any ,这是一个没有声明超类型的类的默认超类:

class Example // Implicitly inherits from Any

Any不是java.lang.Object ; 特别是它没有除equals()hashCode()toString()之外的任何成员。 有关更多详细信息,请参阅Java互操作性部分。

此外,从映射类型的部分我们发现:

Kotlin专门处理一些Java类型。 这些类型不是从Java“按原样”加载的,而是映射到相应的Kotlin类型。 映射只在编译时很重要,运行时表示保持不变。 Java的原始类型被映射到相应的Kotlin类型(记住平台类型):

java.lang.Object kotlin.Any!

这表示在运行时 java.lang.Objectkotlin.Any! 被对待是一样的。 但是! 也意味着这个类型是一个平台类型,这对于禁用空值检查等有其含义。

Java中的任何引用都可能为空,这使得Kotlin对来自Java的对象的严格无效安全的要求是不切实际的。 Java声明的类型在Kotlin中被专门处理,并被称为平台类型。 对于这种类型,空值检查是放松的,所以它们的安全保证与Java中相同(参见下面的更多内容)。

当我们在平台类型的变量上调用方法时,Kotlin在编译时不会发出可空性错误,但是由于Kotlin生成的空指针异常或断言来阻止空值传播,所以调用在运行时可能会失败:

Kotlin编译器将kotlin.Anyjava.lang.Object视为两种不同的类型 ,但在运行时它们使用相同的java.lang.Object 类表示

javaClass属性返回实例的运行时类,所以这就是为什么在这两种情况下都得到相同的java.lang.Object类。

在编译时也有不同的类型,但在运行时是一样的。 它们列在文档的“ 映射类型”部分中。

其实在Kotlin lang方面没有java.lang.Object ,所以你一定不能说AnyObject 。 你只能说Any取代Kotlin中的Object