【问题标题】:Is Inequality Transitive in Java?Java 中的不等式是可传递的吗?
【发布时间】:2011-09-07 11:41:32
【问题描述】:

如果我有 3 个对象 abc,并且我想检查它们是否彼此相等,我需要检查:

if (!a.equals(b) && !b.equals(c) && !a.equals(c)) { // to simplify, assume non-null
    // do something
}

根据 Java 文档,对于正确实现的 equals 方法:

传递性:对于任何非空引用值x、y和z,如果x.equals(y)返回true,y.equals(z)返回true,那么x.equals(z)应该返回 true。

这表明平等是可传递的,但是不平等呢

【问题讨论】:

  • 这与语言无关,而与不等式的含义有关。

标签: java equals inequality transitivity


【解决方案1】:

它不是传递的。考虑x=1y=2z=1

【讨论】:

    【解决方案2】:

    给定a = 5; b = 6; c = 5:

    a != b -> 真

    b != c -> 真

    a != c -> 错误

    所以不,不等式是不可传递的。

    【讨论】:

      【解决方案3】:

      不等式永远不会传递(如果您有 2 个不相等的元素,a 和 b)。因为那时你有 !a.equals(b) 并且因为对称性 !b.equals(a),但是因为身份你有 a.equals(a)。所以不等式不能传递。

      【讨论】:

        【解决方案4】:

        不,当然不是。

        2 != 3
        3 != 2
        

        但是

        2 == 2
        

        【讨论】:

          【解决方案5】:

          嗯,不。对于传递性,您需要 any x、y、z 的条件为真;但是如果我选择z == x,我非常希望

          x != y
          

          和 y != z

          并不意味着

          x != z
          

          因为 z x!

          【讨论】:

            猜你喜欢
            • 2023-03-24
            • 2022-11-11
            • 2021-01-12
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-10-20
            相关资源
            最近更新 更多