我想知道每次循环周期结束时是否在Java中执行条件评估for和while循环.
例:
int[] tenBig = new int[]{1,2,3,4,5,6,7,8,9,10};
for(int index = 0;index < tenBig.length;index++){
System.out.println("Value at index: "+tenBig[index]);
}
Run Code Online (Sandbox Code Playgroud)
将index < tenBig.length要执行的每一个循环周期结束的时间?
假设和经验告诉我是的.
我知道在这个例子中它tenBig.length是一个常数,因此不会对性能产生影响.
但我们假设条件操作在不同情况下需要很长时间.我知道合理的做法是将tenBig.length变量分配给变量.
我仍然希望确保每次评估它.
Jon*_*eet 11
是的,它将在循环的每次迭代中逻辑地评估整个中间操作数.当JIT知道更好的情况下,当然,它可以做一些聪明的事情(甚至可能根据循环条件去除循环内的数组边界检查).
请注意,对于JIT不知道的类型,它可能无法像这样特别优化 - 但仍可能内联诸如获取size()的类型ArrayList<T>.
最后,我通常更喜欢增强的for循环以提高可读性:
for (int value : tenBig) {
...
}
Run Code Online (Sandbox Code Playgroud)
当然,假设您出于其他原因不需要索引.
是.具体地,条件部分在每个循环体之前执行.因此,完全有可能你永远不会进入循环体.
以你的榜样为例:
for(int index = 0;index < tenBig.lenght;index++) {
/* ...body... */
}
Run Code Online (Sandbox Code Playgroud)
这是逻辑(非文字)等价物:
int index = 0;
while (index < tenBig.length) { // happens on each loop
/* ...body... */
index++;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9515 次 |
| 最近记录: |