标题非常简单,我只是想知道在说明之间是否存在差异(任何形式,表现或任何想到的事情):
if (!(x == y)) {
}
和
if (x != y) {
}
此外,x& y是原语或简单对象,如int,String,double等。不是自定义对象。但如果它产生了巨大的变化,我很高兴听到它!
考虑到他们都检查是否相等,但是然后使用"反对"之后,我不确定它是否有所不同。
尽管这种差异非常微小,但它引起了我的好奇心!
编辑:
我想到这个的原因(所以你看到了我的意思)是在输入时:
if (!(myTextField.length == 5))
而不是
if (mytextfield.length != 5)
所以你看到我的意思。字符串长度。
答案 0 :(得分:5)
!(x == y)
和x != y
在逻辑上是等价的,我怀疑任何编译或解释的语言都会在内部对它们进行不同的评估。换句话说,如果你发现了可衡量的差异,我会感到惊讶。
某些语言(如C ++和Scala)允许您覆盖这些运算符,在这种情况下,它当然是一个不同的故事。
答案 1 :(得分:2)
通常!
运算符位于==
或!=
运算符之前。
因此,这个
!x == y
与此相同
(!x) == y
所以你在将它与y进行比较之前否定x
。这显然不仅仅是检查x
和y
之间的不平等:
x != y
为确保在否定之前完成相等性检查,您应该使用另一对括号:
!(x == y)
答案 2 :(得分:1)
第一种情况不太可读。优化后,它相当于第二个。
答案 3 :(得分:0)
这些不一样。但如果你把第一个好像(!(x == y)),那么这些就是 相同。
但如果你把它写成(X!= Y)和(!X == Y),
首先很简单,X不等于Y.
但是在第二个(!X == Y),,,首先!在与Y比较之前将评估X, 假设如果X是布尔类型,那么它将反转X值(True为False,False为True),然后将其与Y进行比较
答案 4 :(得分:-2)
!x == y
表示if ( ( x == 0 && y == 1 ) || ( x != 0 && y == 0 ) )
。换句话说,它与x!=y
不同。