java比较运算符的工作原理

时间:2013-12-24 07:32:55

标签: java android

我认为

if( newItem.ReceiptNo != 0 && newItem.ReceiptYear != 0 && newItem.SR != 0)

if( ! ( newItem.ReceiptNo == 0 && newItem.ReceiptYear == 0 && newItem.SR == 0))

应该是一样的。但我在android上没有得到相同的结果

4 个答案:

答案 0 :(得分:1)

逻辑无法正常工作。

if( newItem.ReceiptNo != 0 && newItem.ReceiptYear != 0 && newItem.SR != 0)

相同
if( ! ( newItem.ReceiptNo == 0 || newItem.ReceiptYear == 0 || newItem.SR == 0))

请注意||而不是&&

另请参阅:De Morgan's Laws

答案 1 :(得分:0)

如果

,你就错了,对你的第二个进行否定
if (newItem.ReceiptNo != 0 || newItem.ReceiptYear != 0 || newItem.SR != 0) 

请记住,and的否定是or

答案 2 :(得分:0)

声明1

if(newItem.ReceiptNo != 0 && newItem.ReceiptYear != 0 && newItem.SR != 0)

这意味着所有3不应为零

声明2

if( !(newItem.ReceiptNo == 0 && newItem.ReceiptYear == 0 && newItem.SR == 0))

第一个 newItem.ReceiptNo == 0 && newItem.ReceiptYear == 0 && newItem.SR == 0表示所有3都应该为零而不是这意味着3中的任何一个都不应为零

对此进行相同更改

if( !(newItem.ReceiptNo == 0 || newItem.ReceiptYear == 0 || newItem.SR == 0))

例如

a != b is equal to !(a=b)
(a != b && a != c) is equal to !(a=b || a=c)
(a != b || a != c) is equal to !(a=b && a=c)

每当!操作员出来并应用某些操作的结果时,它将恢复所有操作,如&&将转换为||和||将转换为&&。

答案 3 :(得分:0)

即使有明显的差异,我认为编译器足够聪明,可以关注这些事情。所以我的建议是使用使代码更容易理解的内容,并将微优化保留给编译器。

请参阅:Is the inequality operator faster than the equality operator?