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进一步对它内联了,所以实际上执行的机器码和第一个程序是一样的。