Java 在以下if-else if-else if结构的构造中,进行了多少比较,1或3?
是否每次在同一if-else if构造中调用compareTo时都会进行新的比较,还是只进行一次比较Java 在以下if-else if-else if结构的构造中,进行了多少比较,1或3?,java,performance,comparison,big-o,counting,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.c
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
public void一般比较(可比e,可比目标){
如果(例如,比较(目标)==0)
//这样做
如果(例如,与(目标)>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
}
}
public void一般比较(可比e,可比目标){
int cmp=e.compareTo(目标);
if(cmp<0){
//少
}否则如果(cmp>0){
//更大的
}否则{
//同样的
}
}
Java有一个称为“局部变量”的功能。只需调用e.compareTo(target)
一次,并将结果存储到本地int
变量中。