换句话说,以下两个语句的行为是否相同?
isFoobared = isFoobared && methodWithSideEffects();
isFoobared &= methodWithSideEffects();
我意识到我可以编写一个测试,但是有人可能对此一无所知,而其他人可能会找到有用的答案。
不,|=
并&=
没有短路,因为它们的复合赋值版本&
和|
等不短路。
[JLS
15.26.2复合赋值运算符](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.26.2)
形式的复合赋值表达式
E1 op= E2
等效于E1 = (T)((E1) op (E2))
,其中T
是的类型E1
,不同之处在于该表达式E1
仅被评估一次。
因此,假设boolean &
的等价为isFoobared &= methodWithSideEffects()
:
isFoobared = isFoobared & methodWithSideEffects(); // no shortcircuit
在另一方面&&
和||
做短路,但令人费解的Java没有为他们复合赋值版本。也就是说,Java既&&=
没有,也没有||=
。
该之间的差异boolean
(逻辑运算符&
和|
)相比,他们的boolean
条件同行(&&
和||
)之处在于前者不“短路”;
后者可以。也就是说,假设没有异常等:
&
并|
始终 评估两个操作数&&
并 有条件地||
评估正确的操作数; 仅当右操作数的值可能影响二进制运算的结果时,才对右操作数进行求值。这意味着在以下情况下不会评估正确的操作数: __
&&
计算为false
false
)||
计算为true
true
)&
,^
和|
&&
||
问题内容: 阅读了有关Java 8的一些知识后,我进入了这篇博客文章,解释了有关流及其还原的一些知识,以及何时有可能使还原短路。在底部,它指出: 请注意,在或的情况下,我们只需要与谓词匹配的第一个值(尽管不能保证返回第一个)。但是,如果流没有排序,则我们的行为应类似于。的操作,并且可能不会短路,因为在所有它的流可能需要评估所有的值,以确定操作者是否是或。因此,使用它们的无限流可能不会终止。 我知道
哪个集合是短路的,复杂条件表达式是短路的确切含义是什么?
问题内容: 我想知道是否有人可以解释什么是短路,也许是在简单的Java程序中使用的一个例子。谢谢你的帮助! 问题答案: 短路是确定结果后立即停止对表达式求值的地方。因此,例如: 如果为,则并且根本不会进行评估,因为表达式的结果已经确定。如果为假,则被评估;如果是真的,则永远不会进行评估。这似乎没有什么区别,但请考虑: 如果返回true,那么与被从来没有所谓,因为表达式的结果已经确定。所以,如果还是
问题内容: 哪一组短路,这到底意味着复杂的条件表达式短路了? 问题答案: 在与运营商“短路”,这意味着如果没有必要,他们不评价的右手边。 在与运营商,如逻辑运算符时,始终评估两侧。 每个操作员只有一种短路情况,它们是: -不必知道右侧是什么,结果必须是 -不必知道右侧是什么,结果必须是 让我们在一个简单的示例中比较行为: 第二个版本使用非短路运算符,并将抛出,但第一个版本将无例外地返回;
本文向大家介绍java实现dijkstra最短路径寻路算法,包括了java实现dijkstra最短路径寻路算法的使用技巧和注意事项,需要的朋友参考一下 【引用】迪杰斯特拉(Dijkstra)算法是典型最短路径算法,用于计算一个节点到其他节点的最短路径。 它的主要特点是以起始点为中心向外层层扩展(广度优先搜索思想),直到扩展到终点为止。 基本思想 通过Dijkstra计算图G中的最短路径时,需要指
当使用if, elsif, until或者使用and或or运算符测试条件while使用短路评估。 例如 - if a < 0 and b > 0 then -- block of code end if 如果<0为假,那么Euphoria并不打算测试b是否大于0.它知道总体结果是假的,无论如何。 同样 - if a < 0 or b > 0 then -- block of code