Java不等于或

Java不等于或,java,Java,我只是想知道为什么这是不正确的: if ( !name.equals("abc") || !name.equals("cba") )` if ((!(name.equals("abc") || name.equals("cba") ))) 这是正确的: if ( !name.equals("abc") || !name.equals("cba") )` if ((!(name.equals("abc") || name.equals("cba") ))) 谢谢大家! 为了理解差异,用英语

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

if ( !name.equals("abc") || !name.equals("cba") )`
if ((!(name.equals("abc") || name.equals("cba") )))
这是正确的:

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

谢谢大家!

为了理解差异,用英语读出你的条件声明总是有帮助的

if ( !name.equals("abc") || !name.equals("cba") )
转化为

如果名称不等于“abc”或名称不等于“cba”,则

鉴于

if ((!(name.equals("abc") || name.equals("cba") )))
如果(名称等于“abc”或名称等于“cba”)为FALSE,则

或者,用布尔逻辑

如果名称不等于“abc”且名称不等于“cba”,则


这两者肯定不一样。

想想
是如何工作的

采取
!(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&&!b)

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


第一个代码有这个真值表

第二个代码有这个真值表


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

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

您可以阅读更多关于逻辑运算的内容

它们的含义并不相同。我建议您以名称为例,思考表达式的每个部分的计算结果。第一个条件将始终返回true,因为两个操作数相互矛盾。这是基本逻辑。如果名称不等于A或不等于B-它不能同时等于两者,所以总是正确的。-名称的反面是A或B“-显然是一个更合理的条件。你认为这个真值表正确吗?你能给我一个第一个条件有假值的例子吗?它是错的。我使用的在线软件工作不正常。现在我已经改正了。谢谢@SanketMakaniStill如果你仔细观察情况,这两种情况只有三种可能
a
b
不能同时为真。
!x || !y  ==  !(x && y)
!x && !y  == !x || !y