原始数组如何在Java中为每个循环使用new?

我知道每个循环的新特性适用于Iterable和数组,但我不知道在使用数组时幕后的内容。

任何人都可以帮我理解这个吗? 提前致谢。

int[] number = new int[10]; for(int i: number) { } 

循环相当于:

 for(int j = 0; j < number.length; j++) { int i = number[j]; ... } 

其中j是内部生成的引用,不与普通用户标识符冲突。

有点晚了,但在这里。

编译器知道您是否正在为集合或数组使用for-each循环语句。

如果用于收集,编译器会使用Iterator将for-each循环转换为等效的for循环。

如果用于数组,则编译器使用索引变量将for-each循环转换为等效for循环。

这是oracle.com上的描述

在您的代码中,您在内存中分配一个包含10个整数的数组,并获取对它的引用。 在for循环中,您只需遍历数组中的每个项目,对于所有项目,最初将为0。 在迭代数组元素时,每个项的值将存储在for循环中声明的变量i中。

这相当于:

 for(int x = 0; x < number.length; x++) { int i = number[x]; } 

每个over数组对于这个结构基本上是“糖”:

 for(int i = 0;i 

我认为这是作为语言的结构提供的,这样人们就可以使用增强的for循环来覆盖以旧方式迭代的结构。

这相当于:

 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++) { 

如果使用java 8,可以使用IntStream.range(1,4)