当前位置: 首页 > 知识库问答 >
问题:

短路操作人员与非短路操作人员

华瀚漠
2023-03-14

我理解下面的区别(至少对于Java):

if( true || false ) // short-circuiting boolean operator
if( true | false )  // non-short-circuiting boolean operator

但我的问题是,当你在处理布尔表达式时,有没有理由使用非短路运算符?是否有一些性能上的好处或使用不会被认为是坏的练习?

共有1个答案

荀子轩
2023-03-14

您可能希望使用非短路运算符的一个原因是,如果您在某种程度上依赖于函数的副作用。例如。

boolean isBig(String text) {
  System.out.println(text);
  return text.length() > 10;
}

...
if( isBig(string1) || isBig(string2) ){
   ...
}

如果您不关心println是否被执行,那么您应该使用上面的短路操作。但是,如果您希望两个字符串始终被打印(因此取决于副作用),那么您需要使用non-short-circuit运算符。

实际上,您几乎总是希望使用短路运算符。依赖表达式中的副作用通常是糟糕的编程实践。

 类似资料:
  • 我知道C中的逻辑运算符遵循短路,但我怀疑的是短路和运算符优先规则并不是相互对立的。参见下面的示例: 根据优先级规则,最高优先级为前缀运算符的优先级。因此,应首先计算,然后计算,最后将结果分配给。因此预期输出应为。但在本例中,的第二个操作数从未实际执行,结果是。 为什么这里没有应用优先规则。逻辑运算符是否不受优先规则约束?如果有,还有哪些运营商表现出这样的行为?而这种行为背后的逻辑是什么?

  • 我正在阅读Java streams的短路操作,在一些文章中发现,skip()是一种短路操作。 在另一篇文章中,他们没有提到短路操作。 现在我很困惑;是短路操作还是不是?

  • 将使用最后两个元素(和),而不考虑一旦遇到就知道产品了。

  • 问题内容: 这与如何在Stream上短路减少有本质上相同的问题?。但是,由于该问题集中在布尔值流上,并且其答案不能推广到其他类型并减少操作,因此我想提出一个更笼统的问题。 我们如何对流进行还原,以使其在遇到用于还原操作的吸收元素时短路? 对于乘法,典型的数学情况将为0。这: 无论遇到什么事实产品都会被知道,它将消耗最后两个元素(和)。 问题答案: 不幸的是,StreamAPI具有有限的功能来创建您

  • 链路操作 在 Mininet cli 中,使用 link 命令,禁用或启用某条链路,格式为 link node1 node2 up/down 例如临时禁用 s1 跟 h2 之间的链路,可以用 link s1 h2 down

  • 在JavaScript和Java中,equals运算符(或)的优先级高于or运算符()。但这两种语言(JS、Java)都支持语句中的短路: 现在,根据操作员的优先级,不应该发生短路,就优先级而言,=