我理解下面的区别(至少对于Java来说是这样):
if( true || false ) // short-circuiting boolean operator
if( true | false ) // non-short-circuiting boolean operator但我的问题是,在处理布尔表达式时,是否有任何理由使用非短路运算符?是否有一些性能上的好处或使用不被认为是不好的练习?
发布于 2013-08-21 05:25:15
您可能希望使用非短路运算符的一个原因是,如果您在某种程度上依赖于函数的副作用。例如。
boolean isBig(String text) {
System.out.println(text);
return text.length() > 10;
}
...
if( isBig(string1) || isBig(string2) ){
...
}如果您不关心是否执行println,那么您应该使用如上所述的短路操作。但是,如果希望始终打印这两条字符串(因此取决于副作用),则需要使用非短路操作符。
实际上,你几乎总是想使用短路操作器.在表达式中依赖副作用通常是不好的编程实践。
一个例外是在非常低级别或性能敏感的代码中。短路运算符可能会稍微慢一些,因为它们会导致程序执行中的分支。此外,使用按位运算符可以作为单个整数操作执行32或64并行布尔操作,这是非常快速的。
发布于 2013-08-21 05:32:25
如果您的代码性能足够敏感,操作也足够便宜,那么使用非短路可以更快。这是因为使用||涉及到执行分支,而分支预测丢失可能非常昂贵。当|执行计算和检查变量时,速度可能要快得多,从而避免了分支预测的失败。
注意:这是一种微优化,除非它被多次、多次调用,否则很少会看到不同之处。
发布于 2013-08-21 05:27:13
我的问题是,在只处理布尔人的情况下,更多地关注如何找到使用x的好处。
考虑以下情况
while ( !credentialvalid() | (loginAttempts++ < MAX) ) {
// tell something to user.
}在这种情况下,需要|,因为我也必须增加尝试数:)
https://stackoverflow.com/questions/18349330
复制相似问题