gpt4 book ai didi

java - Kotlin 中的平等

转载 作者:IT老高 更新时间:2023-10-28 13:40:58 24 4
gpt4 key购买 nike

我正在学习 Kotlin,具有 C++ 和 Java 背景。我期待以下内容打印 true,而不是 false。我知道 == 映射到 equalsequals 的默认实现是否不比较每个成员,即 firstNamelastName?如果是这样,它不会将字符串值视为相等(因为 == 再次映射到 equals )?显然,我在 Kotlin 中还没有搞清楚与平等与身份相关的一些东西。

class MyPerson(val firstName: String, val lastName: String)

fun main(args: Array<String>) {
println(MyPerson("Charlie", "Parker") == MyPerson("Charlie", "Parker"))
}

最佳答案

参照平等

Java

在 Java 中,equals 的默认实现比较变量的 reference ,这就是 == always 所做的:

The equals method for class Object implements the most discriminating possible equivalence relation on objects; that is, for any non-null reference values x and y, this method returns true if and only if x and y refer to the same object (x == y has the value true).

我们称之为“参照平等”。

Kotlin

在 Kotlin 中 == 被编译为 equals,而 === 相当于 Java 的 ==.

结构平等

当我们想要结构而不是引用相等时,我们可以覆盖equals,这是从不完成的正如你所建议的,normal 类的默认值。在 Kotlin 中,我们可以使用 data class,编译器会自动为其创建一个基于构造函数属性的实现(阅读 here)。

如果您手动覆盖equals(反之亦然),请记住始终覆盖hashCode,并遵守非常严格的contracts两种方法。 Kotlin 的编译器生成的实现确实满足契约(Contract)。

关于java - Kotlin 中的平等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45772946/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com