在以下构造中if - else if - else if if structure,进行了多少次比较,1或3?

时间:2014-09-27 18:14:54

标签: java performance comparison big-o counting

每次在相同的if - else if构造中调用compareTo或者是否进行了单个比较时,是否进行了新的比较?

public void genericComparisons(Comparable e, Comparable target){
    if(e.compareTo(target) == 0)
       // do this
    else if(e.compareTo(target) > 0)
       // do something else
    else if(e.compareTo(target) < 0)
       // do that
} // end method

1 个答案:

答案 0 :(得分:0)

你可以使用局部变量显然优化它......这样的优化总是很好,因为它使你的代码更清晰,重复性更低。

但是,假设您compareTo是一个简单的无副作用的方法,JVM可能会内联它并可以为您进行此优化。我想,这就是你真正想知道的。

没有简单的方法可以找到它,特别是使用println必须失败,因为允许JVM使您的程序更快,但行为不同。你不能在字节码中看到它,因为它根本不包含任何优化,它们会在程序运行一段时间时发生。

JVM也不允许改进你的编码风格,所以我建议使用局部变量,特别是对于更复杂的表达式。


到达时,你的最后状况显然是真实的。如果您希望代码系统且对称,请使用此

public void genericComparisons(Comparable e, Comparable target) {
    int cmp = e.compareTo(target);
    if (cmp < 0) {
       // less
    } else if (cmp > 0) {
       // greater
    } else {
       // same
    }
}