Tag: 平等

我可以添加运算符到现有的类吗?

在Kotlin中,我想要添加一个equals方法到一个尚未得到equals实现的现有类。 在我的情况下,我想比较两个BooleanArray实例。 如果两个数组a1和a2的大小相同,并且所有项都相等,则equals (以及== )应该返回true 。 因此a1[i] === a2[i]对于所有的0 <= i < size 。 该文档指出可以通过扩展方法定义运算符 : 该函数必须声明为 fun equals(other: Any?): Boolean 或者具有相同参数列表和返回类型的扩展函数。 BooleanArray不提供一个equals方法。 所以我写道: fun BooleanArray.equals(other: Any?): Boolean { return … } 但是这个扩展被忽略。 当我比较两个BooleanArray如 BooleanArray(0).equals(BooleanArray(0)) 它不调用扩展方法,因此对于两个不同的实例总是评估为false 。

平等在Kotlin

我正在学习Kotlin,拥有C ++和Java背景。 我期待以下打印true ,而不是false 。 我知道==映射到equals 。 equals的默认实现是否不比较每个成员,即firstName和lastName ? 如果是这样,它不会看到字符串值相等(因为==地图再次equal )? 显然有一些与平等与身份相关的东西,我还没有在科特林的权利。 class MyPerson(val firstName: String, val lastName: String) fun main(args: Array<String>) { println(MyPerson("Charlie", "Parker") == MyPerson("Charlie", "Parker")) }