我想知道是否在每次循环周期结束时在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]);
}
循环周期结束后,是否会执行
index < tenBig.length
?假设和经验告诉我是的。
我知道在此示例中,
tenBig.length
是一个常量,因此不会对性能造成影响。但是,让我们假设条件操作在不同情况下花费的时间很长。
我知道接下来要做的逻辑就是将
tenBig.length
分配给一个变量。我仍然要确保每次都对其进行评估。
最佳答案
是的,它将在每次循环迭代时逻辑上评估整个中间操作数。当然,如果JIT知道的更好,它可以做一些聪明的事情(甚至可能根据循环条件在循环中删除数组边界检查)。
请注意,对于JIT未知的类型,它可能无法像这样专门进行优化-但仍可能内联诸如获取size()
的ArrayList<T>
的事情。
最后,我通常更喜欢增强的for循环以提高可读性:
for (int value : tenBig) {
...
}
当然,这是假设您出于其他原因不需要索引。
关于Java for Loop评估,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3881660/