哪种方法在最佳实践/效率方面更好?
if (x == 1
&& y == 1
&& z == 1)
{ do things }
或
if (x != 1 ||
y != 1 ||
z != 1)
{ don't do things and go to a different bit of logic.}
短路AND和OR时效率是否有任何差异?当需要进行多个逻辑断言时,(通常)更好地检查是正面还是负面?
答案 0 :(得分:2)
对于代码的纯粹优化,它取决于具体情况。这种情况平均会进行最少量的比较。
对于代码设计,它也是个案。 if-cases应该与您实际查找的内容相匹配。例如,测试字符串输入是否正确的函数。 (测试组成)
public boolean isValidString (string s) {
if (s.isEmpty())
return false;
if (s.length() < 12)
return false;
if (s...)
return false
return true;
}
在这种情况下,最合乎逻辑的方法是||。它可以写成。
public boolean isValidString (string s) {
if (s.isEmpty() || s.length() < 12 || s...)
return false;
return true;
}
使用http://en.wikipedia.org/wiki/De_Morgan%27s_laws,可以将其重写为和{。然而,它不是我们想要测试的,即使它们产生相同的结果。
在一般情况下坚持逻辑方法。
答案 1 :(得分:1)
如果您考虑效率,那么请考虑每个案例的发生频率。应该把最可能的一个放在前面,这样整个表达式就会立即短路。
答案 2 :(得分:0)
最好使用“==”而不是“!=”。
这也是PMD推荐的。
以下是好的并且改善了可重复性。
If(true){
//
}else{
//
}
大于
If(!true){
//
}else{
//
}
答案 3 :(得分:0)
好吧,在一些JVM实现中,boolean
值在JVM中存储为整数。 int
值1
表示true
,int
值0
表示false
。此外,处理器级别的比较逻辑依赖于架构。有些机器可能会减去2个操作数,然后添加然后进行比较,其他机器可能会逐字节等进行比较。所以,除非你正在查看特定的硬件架构(你不应该...至少java编程语言),我认为这不重要..