据我所知,每个循环的新功能都适用于Iterable和数组,但我不知道在使用数组时幕后是什么。
任何人都可以帮我理解这个吗?提前谢谢。
int[] number = new int[10];
for(int i: number) {
}
答案 0 :(得分:16)
循环等同于:
for(int j = 0; j < number.length; j++) {
int i = number[j];
...
}
其中j是内部生成的引用,与普通用户标识符不冲突。
答案 1 :(得分:10)
有点晚了,但现在是。
编译器知道您是否正在为集合或数组使用for-each循环语句。
如果用于收集,
编译器使用Iterator
将for-each循环转换为等效for循环。
如果用于阵列, 编译器使用索引变量将for-each循环转换为等效的for循环。
答案 2 :(得分:3)
在代码中,在内存中分配一个包含10个整数的数组,并获取对它的引用。在for循环中,您只需遍历数组中的每个项目,对于所有项目,最初将为0。当您迭代数组元素时,每个项的值将存储在for循环中声明的变量i
中。
答案 3 :(得分:2)
这相当于:
for(int x = 0; x < number.length; x++) {
int i = number[x];
}
答案 4 :(得分:1)
这相当于:
final int len = number.length;
for(int j = 0; j < len; j++) {
int i = number[j];
}
请注意,forEach不会评估每个循环中的.length。 这也许可以被JVM消除,但特别是在集合的情况下, 有些人会使用
for(int j = 0; j < collection.size(); j++) {
它与更快的
产生(小)差异int len = collection.size()
for(int j = 0; j < len; j++) {
答案 5 :(得分:0)
每个过度数组对于这个结构来说基本上都是“糖”:
for(int i = 0;i<number.length;i++)
{
}
我认为这是作为语言的构造提供的,这样人们就可以在以旧方式迭代的结构上使用增强的for循环。
答案 6 :(得分:0)
IntStream.range(1,4)
。