加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 为什么Kotlin使用==进行结构相等,并引入===用于引用相等

发布时间:2020-12-15 04:50:14 所属栏目:Java 来源:网络整理
导读:总的来说,Kotlin的每一个设计决定都感觉它本身就很棒,并提供了一个很好的 Java过渡.作为一名 Java开发人员,您可以开始编写代码,将Kotlin视为一个更简洁的Java,而不是样板,然后顺利地进入功能编程等更高级的方面. 然而,我想知道的一件事是为什么它的设计者决
总的来说,Kotlin的每一个设计决定都感觉它本身就很棒,并提供了一个很好的 Java过渡.作为一名 Java开发人员,您可以开始编写代码,将Kotlin视为一个更简洁的Java,而不是样板,然后顺利地进入功能编程等更高级的方面.

然而,我想知道的一件事是为什么它的设计者决定使==的行为与equals相同,然后引入===作为参考等式检查.我可以想象试图让其他Java开发人员参与其中,让他们看到你的Kotlin代码并思考“哦不,在所有应该是平等调用的地方都有参考检查!”

在这里摆脱Java惯例的思维过程是什么?为了说清楚,我完全理解在Kotlin中==或equals和===之间的区别是什么,我只是想知道为什么.

解决方法

主要原因可能是对象平等的检查频率远远超过对象标识,所以它应该至少同样容易.

我还没有看到关于此的明确声明.但是Kotlin团队的成员在Kotlin In Action书中有一个指针.第4.3.1节介绍了==运算符,首先描述了Java的比较并说:

in Java,there’s the well-known practice of always calling equals,and there’s the well-known problem of forgetting to do so.

在Java中,检查对象标识很简单:

if (firstObj == secondObj)

但是检查对象的平等性更长,而且不太清楚:

if (firstObj.equals(secondObj))

– 或者更确切地说,如果您不想冒NullPointerException的风险:

if ((firstObj == null) ? (secondObj == null) : firstObj.equals(secondObj))

你可以看到更多的痛苦是打字,并且正确. (特别是当其中一个对象是具有副作用的表达时……)

所以很容易忘记差异,或者不被打扰,而是使用==代替. (这可能会导致细微的,很难发现的,以及间歇性地咬人的错误.)

然而,Kotlin使最常见的操作变得更容易:它的==运算符使用equals()检查对象相等,并且也负责空值检查.这解决了Java’忘记这样做’的问题.

(虽然与Java代码的互操作性显然是一个主要目标,但JetBrains并没有将自己局限于尝试看起来像Java; Kotlin尽可能借用Java,但不怕改变事情.你可以看到使用val和var和尾随类型的声明,范围和开放的不同默认值,处理方差的不同方式,& c.)

Kotlin的一个动机是修复Java中的许多问题. (事实上??,JetBrains的comparison语言首先列出了“Kotlin中提到的一些Java问题”.)因此,这似乎是改变背后的主要原因.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读