每次在相同的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
答案 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
}
}