Java不等于OR

时间:2017-06-10 11:24:31

标签: java

我只是想知道为什么这不正确:

if ( !name.equals("abc") || !name.equals("cba") )`

这是正确的:

if ((!(name.equals("abc") || name.equals("cba") )))
谢谢你!

4 个答案:

答案 0 :(得分:0)

要理解这种差异,用英语读出你的条件陈述总是有帮助的。

if ( !name.equals("abc") || !name.equals("cba") )

转换为

  

如果名字不等于" abc"或名称不等于" cba",然后......

然而,

if ((!(name.equals("abc") || name.equals("cba") )))
  

如果(名称等于" abc'或者名称等于" cba")IS FALSE,那么......

或者,通过布尔逻辑,

  

如果名字不等于" abc" AND名称不等于" cba",然后......

两者肯定不一样。

答案 1 :(得分:0)

考虑!的工作原理。

选择!(a || b)

真相表:

a=f b=f = !(f || f) = !(f) = t
a=f b=t = !(f || t) = !(t) = f
a=t b=f = !(t || f) = !(t) = f
a=t b=t = !(t || t) = !(t) = f

现在选择(!a || !b)

a=f b=f = (!f || !f) = (t || t) = t
a=f b=t = (!f || !t) = (t || f) = t
a=t b=f = (!t || !f) = (f || t) = t
a=t b=t = (!t || !t) = (f || f) = f

现在采用正确的方式分发! (!a && !b)

a=f b=f = (!f && !f) = (t && t) = t
a=f b=t = (!f && !t) = (t && f) = f
a=t b=f = (!t && !f) = (f && t) = f
a=t b=t = (!t && !t) = (f && f) = f

为了完整起见,请与(!a || !b) !(a && b)

相同
a=f b=f = !(f && f) = !(f) = t
a=f b=t = !(f && t) = !(f) = t
a=t b=f = !(t && f) = !(f) = t
a=t b=t = !(t && t) = !(t) = f

答案 2 :(得分:0)

第一个代码有这个真值表

enter image description here

第二个代码改为具有此真值表

enter image description here

答案 3 :(得分:0)

实际上这是一个数学问题。这些是相同的逻辑方程式:

!x || !y  ==  !(x && y)
!x && !y  == !x || !y

您可以阅读有关逻辑操作here

的更多信息