我理解下面的区别(至少对于Java):
if( true || false ) // short-circuiting boolean operator
if( true | false ) // non-short-circuiting boolean operator
但我的问题是,当您处理布尔表达式时,有什么理由使用非短路运算符?是否有一些性能优势或用途不会被视为不好的做法?
您可能想要使用非短路运算符的原因之一是您是否在某种程度上依赖于函数的副作用。例如。
boolean isBig(String text) {
System.out.println(text);
return text.length() > 10;
}
...
if( isBig(string1) || isBig(string2) ){
...
}
如果你不关心是否println
执行后,您应该使用上面的短路操作。但是,如果您希望始终打印两个字符串(因此取决于副作用),那么您需要使用非短路运算符。
实际上,您几乎总是想使用短路运算符。依赖表达式中的副作用通常是不好的编程习惯。
一个例外是非常低级别或性能敏感的代码。短路运算符可能会稍微慢一些,因为它们会导致程序执行中出现分支。此外,使用按位运算符允许您将 32 或 64 个并行布尔运算作为单个整数运算执行,速度非常快。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)