Moosphan / Android-Daily-Interview

:pushpin:每工作日更新一道 Android 面试题,小聚成河,大聚成江,共勉之~
5.47k stars 776 forks source link

2019-12-11:说说Kotlin中的Any与Java中的Object有何异同? #209

Open Moosphan opened 4 years ago

Jsondx commented 4 years ago

首先这个问题很简单,其次我不会 - - , 有请楼下回答

jack-chong commented 4 years ago

名字不一样

424385117 commented 4 years ago

Any 比object大,obejct相当于java的object,Any包括Unit,Null这些

feelschaotic commented 4 years ago

同:

我们思考下,为什么 Kotlin 设计了一个 Any ?

当我们需要和 Java 互操作的时候,Kotlin 把 Java 方法参数和返回类型中用到的 Object 类型看作 Any,这个 Any 的设计是 Kotlin 兼容 Java 时的一种权衡设计。

所有 Java 引用类型在 Kotlin 中都表现为平台类型。当在 Kotlin 中处理平台类型的值的时候,它既可以被当做可空类型来处理,也可以被当做非空类型来操作。

试想下,如果所有来自 Java 的值都被看成非空,那么就容易写出比较危险的代码。反之,如果 Java 值都强制当做可空,则会导致大量的 null 检查。综合考量,平台类型是一种折中的设计方案。