【问题标题】:Parallel Boolean Expression Evaluation in Java [duplicate]Java中的并行布尔表达式评估[重复]
【发布时间】:2012-11-07 14:13:01
【问题描述】:

可能重复:
When Java evaluates a conjunction (<boolean exp1> && <boolean exp2>), does it eval exp2 if exp1 is false?

如果我有 2 个条件,比如 A 和 B,然后我输入:

A && B

它们是否都并行评估,然后才进行 AND? 例如,如果我输入A &amp;&amp; false,它会评估A 条件还是知道它无论如何都是假的?

如果不是并行进行,是从右边开始还是从左边开始? (A &amp;&amp; false VS false &amp;&amp; A)。

谢谢。

编辑:知道了。谢谢大家!

【问题讨论】:

  • 不会的。如果A是假的,它不会去B。是的。从右到左。
  • 仅当第一个为真时才评估第二个 (B)。否则,如果 A 为假,则直接将 A && B 评估为假,而不评估 B,因为这无关紧要。
  • @user550413 如果您得到答案,您应该将答案标记为已接受。
  • @eis 是的,但我需要等待 10 分钟才能接受。

标签: java boolean-expression


【解决方案1】:
A && B

不, 首先评估 A,如果 A 为假,则跳过评估 B 如果 A 为真,则检查 B 是否为真

A && false

在这种情况下,首先评估 A,如果 A 为假,则不检查下一个条件(假)。如果 A 为真,则将评估假,但由于它为假,因此整个条件将为假。

【讨论】:

  • 好的,这是左右评估。它取决于编译器还是有保证?
  • @user550413 是的,它从左侧评估。是的,它是可靠的:P
【解决方案2】:

它将从left开始到right。也就是说,如果不涉及括号。

if("name".equals(variable1)){}

当var1 为空时会出错。但是,当您使用时:

if(variable1.equals("name")){}

它是空安全的。

【讨论】:

  • 您的示例代码与A &amp;&amp; B 的评估方式有何关联?而且,这完全是错误的。如果 var1 为 null,则两种情况都会中断。
  • 我看到您更改了代码。然而,它仍然不相关并且仍然是错误的。 if(variable1.equals("name")) 对于variable1 来说不是空安全的。
猜你喜欢
  • 1970-01-01
  • 2013-12-15
  • 1970-01-01
  • 2018-06-06
  • 2019-03-12
  • 1970-01-01
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多