Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在以下if-else if-else if结构的构造中,进行了多少比较,1或3?_Java_Performance_Comparison_Big O_Counting - Fatal编程技术网

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

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

是否每次在同一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
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
变量中。