(X!= Y)和(!(X == Y))之间的差异?

时间:2015-01-08 13:00:25

标签: objective-c optimization

标题非常简单,我只是想知道在说明之间是否存在差异(任何形式,表现或任何想到的事情):

if (!(x == y)) {

}

if (x != y) {

}

此外,x& y是原语或简单对象,如int,String,double等。不是自定义对象。但如果它产生了巨大的变化,我很高兴听到它!

考虑到他们都检查是否相等,但是然后使用"反对"之后,我不确定它是否有所不同。

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

编辑:

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

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

而不是

if (mytextfield.length != 5)

所以你看到我的意思。字符串长度。

5 个答案:

答案 0 :(得分:5)

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

某些语言(如C ++和Scala)允许您覆盖这些运算符,在这种情况下,它当然是一个不同的故事。

答案 1 :(得分:2)

通常!运算符位于==!=运算符之前。

因此,这个

!x == y

与此相同

(!x) == y

所以你在将它与y进行比较之前否定x。这显然不仅仅是检查xy之间的不平等:

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不同。