链式ANDs或链式OR最佳实践

时间:2014-12-02 08:58:25

标签: java

哪种方法在最佳实践/效率方面更好?

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时效率是否有任何差异?当需要进行多个逻辑断言时,(通常)更好地检查是正面还是负面?

4 个答案:

答案 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中存储为整数int1表示trueint0表示false。此外,处理器级别的比较逻辑依赖于架构。有些机器可能会减去2个操作数,然后添加然后进行比较,其他机器可能会逐字节等进行比较。所以,除非你正在查看特定的硬件架构(你不应该...至少java编程语言),我认为这不重要..