gpt4 book ai didi

kotlin - 等于两个对象开放类

转载 作者:行者123 更新时间:2023-12-02 12:01:27 26 4
gpt4 key购买 nike

fun main()
{
println(A() == B())
}

open class A
open class B
为什么编译器在 equals 上不显示错误?如果没有开课,有错误 Operator '==' cannot be applied to 'A' and 'B' .

最佳答案

(基于我对 https://discuss.kotlinlang.org/t/strange-behavior-with-equality-checking/7289/2 的理解)
对于类(class),请调用 x == y等于调用 x.equals(y) .默认情况下,equals()是一个引用相等:每个对象只与它自己相等。
现在,考虑以下情况:

  • 如果两个类(class)都没有开放,那么他们的equals()不能改变。因此,比较的结果总是false .由于这可能是意外行为,因此编译器会显示错误。
  • 如果只有一个类是打开的,那么它的子类可以覆盖它的equals()。行为。
    有人可能会认为现在的条件 x == y可能会成为现实。但是,相等必须满足一些性质,其中之一是。对称 : x == y 的结果必须与 y == x 相同.由于第二类不能覆盖它的equals()行为,条件仍然是 false .
  • 如果两个类都是开放的,那么它们的两个子类都可以覆盖 equals()这样它就变成了true不违反 equals() 的任何属性.
  • 关于kotlin - 等于两个对象开放类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62685806/

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