【发布时间】:2015-07-14 00:14:46
【问题描述】:
在阅读同事的 Java 代码时,我偶然发现了一大堆 if/else 语句。在这些声明中,几个&& 和|| 操作员在没有括号帮助的情况下互相争斗。我将语句简化为:
if (true || true && false)
return true;
else
return false;
你认为结果会是什么?老实说,我以为是false,但似乎短路不像我预期的那样工作。在这种情况下,结果是true。短路机制似乎将整个表达式视为true,当它找到true 后紧跟||。
但是逆向表达,结果是什么?
if (false && true || true)
return true;
else
return false;
如果我们遵循相同的逻辑,它应该是错误的。第一个布尔值是false,紧随其后的是&&,但结果又是true。这对我来说是有道理的,但它似乎与我们之前的实验不兼容。
这是我的理论:
如果我们找到true 后跟||,那么它就是true,不管接下来会发生什么,即使后面还有一长串其他逻辑运算符。但是如果我们找到false 后跟&&,它只会短路下一个元素,而不是整个语句。
这是我的问题:
我说的对吗?这对我来说似乎有点傻。 true 比 false 强吗?
【问题讨论】:
-
docs.oracle.com/javase/tutorial/java/nutsandbolts/…
&&的优先级高于||,如现有答案中所述(只是想提供链接) -
在这种情况下无论如何你应该让你的同事写括号,以避免有人在这段代码中添加新条件时可能发生的错误!
-
短循环将永远改变布尔表达式的结果。短循环唯一要做的就是避免执行表达式的其余部分。
-
@Jägermeister,公平地说,如果他们问是否代码应该这样写,这个问题可能会因为主要基于意见而被关闭
-
不是短路,而是运算符优先级
标签: java logical-operators short-circuiting