请问一下,为什么后者的执行时间比前者的更长?

public class For_Test {

public static void main(String[] args) {
    List list = new ArrayList();

    for(int i=0; i<100000; i++){
        list.add(1);
    }
    long start = System.currentTimeMillis();
    for(int i=0; i<list.size(); ++i){
        for(int j=0; j<list.size(); j++){
            for(int k=0; k<list.size(); k++){
                int a = 0;
            }
        }
    }
    System.out.println(System.currentTimeMillis() - start);

    start = System.currentTimeMillis();
    int j = list.size();
    System.err.println(j);
    for(int i=0; i<j; i++){
        for(int k=0; k<j; k++){
            for(int a=0; a<j; a++){
                int b = 0;
            }
        }
    }

    System.out.println(System.currentTimeMillis() - start);
}

}


执行了N次,互有输赢。而且循环100000*100000*100000次,相差+-20ms,误差范围内吧

把前面的++i改成i++试试,应该是这个原因吧。

两者的时间应该一样长,如果第二个长,应该是误差。也许你觉得调用size()会变慢,那是你的误解。因为你可以看size方法的源代码
public int size()
{
return size;
}
它不是数出来的,而是返回的成员变量size。而且jvm进一步对它内联了,所以实际上执行的机器码和第一个程序是一样的。