java - 是多次访问 array[i] 中的值,还是将该值存储在变量 (v=array[i]) 中并访问该变量 v 更好?

标签 java arrays cost-based-optimizer

我想知道多次访问 array[i] 中的值或将该值存储为新变量 (v=array[i]) 并多次访问变量 v 是否会花费更多?

例如(在java中),这样写会更好吗:

int [] array = {1,2,3,4,5};

for(int i=0;i<5;i++){
    if (array[i]<0){
        System.out.println("negativ");
    }else if(array[i]>0){
        System.out.println("positiv");
        if (array[i]==42){
            System.out.println("great answer");
        }
    }else{
        System.out.println("zero");
    }
}

int [] array = {1,2,3,4,5};
int v;

for(int i=0;i<5;i++){
    v = array[i];
    if (v<0){
        System.out.println("negativ");
    }else if(v>0){
        System.out.println("positiv");
        if (v==42){
            System.out.println("great answer");
        }
    }else{
        System.out.println("zero");
    }
}

感谢您的帮助。

最佳答案

您最终会使用第二种形式多占用两个字节:

  34: istore_2
  35: iload_2

变量访问最终成为 iaload 与 iload_2 - 差别不大。如果您有足够的变量(超过 4 个),则必须使用 iload(索引)而不是 iload_,那么您会看到第二种形式的更大代码。

明确地说:您不会通过引入变量来保存任何内容,实际上是添加指令(设置变量的位置)。

关于java - 是多次访问 array[i] 中的值,还是将该值存储在变量 (v=array[i]) 中并访问该变量 v 更好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44510260/

相关文章:

java - jodatime days 期间类型问题/错误

javascript - 如何在数组中保存相同的对象类型

oracle - 为什么优化器计划与实验性查询运行不相关?

database - 数据库管理系统 : Relational Algebra Execution Plan Cost Calculation

java - 函数式编程如何变得更好 (Java 8)

java - XML 的注解 @JsonDeserialize 的等价物

arrays - 如何计算多维数组中的反转?

java - Java String.getBytes ("UTF-8") 是否保留词典顺序?

postgresql - 为什么 Postgres 中的错误行估计很慢?

java - Radix 在 Java 中使用队列对字符串数组进行排序