(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
。这显然与仅检查 x
和 y
:
之间的不等式不同
x != y
为了确保在否定之前完成相等检查,您应该使用另一对括号:
!(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
。这显然与仅检查 x
和 y
:
x != y
为了确保在否定之前完成相等检查,您应该使用另一对括号:
!(x == y)
第一种情况可读性较差。优化后相当于秒