(X != Y) 和 (!(X == Y)) 之间的区别?

Difference between (X != Y) and (!(X == Y))?

标题非常直截了当,我只是想知道说明之间是否存在差异(任何类型、性能或想到的任何内容):

if (!(x == y)) {

}

if (x != y) {

}

此外,x 和 y 是原始的或简单的 objects,例如 int、String、double 等。不是自定义 objects。但如果它有很大的不同,我会很高兴听到它!

考虑到他们都检查相等性,但之后有人使用 "opposite",我不确定它是否不同。

尽管这种差异非常小,但它引起了我的好奇!

编辑:

我想到这个的原因(所以你明白我的意思)是在输入这个的时候:

if (!(myTextField.length == 5))

而不是

if (mytextfield.length != 5)

所以你明白我的意思了。字符串长度。

这些不一样。但是,如果您将第一个包含在 if(!(x == y)) 中,则这些是 相同的。

但万一你写成 (X != Y) 和 (!X == Y),

首先很简单,X不等于Y。

但在第二个 (!X == Y), 首先 !X 将在与 Y 比较之前进行评估, 比方说,如果 X 是布尔类型,那么它将反转 X 值(True 到 False,False 到 True),然后将它与 Y

进行比较

!(x == y)x != y 在逻辑上是等效的,我怀疑任何编译或解释的语言都会在内部对它们进行不同的评估。换句话说,如果您发现可衡量的差异,我会感到惊讶。

某些语言(例如 C++ 和 Scala)允许您覆盖这些运算符,在这种情况下当然是另一回事了。

!x == y 表示 if ( ( x == 0 && y == 1 ) || ( x != 0 && y == 0 ) )。换句话说,它不同于 x!=y.

通常 ! 运算符在 ==!= 运算符之前。

因此,这个

!x == y

与此相同

(!x) == y

因此,在将其与 y 进行比较之前,您先否定 x。这显然与仅检查 xy:

之间的不等式不同
x != y

为了确保在否定之前完成相等检查,您应该使用另一对括号:

!(x == y)

第一种情况可读性较差。优化后相当于秒