当我阅读同事的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
更强吗?