Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,基元数组如何处理new for each循环?_Java_Arrays_Foreach - Fatal编程技术网

在Java中,基元数组如何处理new for each循环?

在Java中,基元数组如何处理new for each循环?,java,arrays,foreach,Java,Arrays,Foreach,我知道new for each循环适用于Iterable和数组,但我不知道在使用数组时幕后会发生什么 有人能帮我理解吗?提前谢谢 int[] number = new int[10]; for(int i: number) { } 在代码中,在内存中分配一个包含10个整数的数组,并获取对该数组的引用。在for循环中,您只需迭代数组中的每个项,所有项的初始值都为0。迭代数组元素时,每个项的值都将存储在for循环中声明的变量i中。循环相当于: for(int j = 0; j < num

我知道new for each循环适用于Iterable和数组,但我不知道在使用数组时幕后会发生什么

有人能帮我理解吗?提前谢谢

int[] number = new int[10];

for(int i: number) {

}

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

循环相当于:

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

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

数组上的for each基本上是该结构上的“sugar”:

for(int i = 0;i<number.length;i++)
{  
}
for(int i=0;i这相当于:

for(int j = 0; j < number.length; j++) {
  int i = number[j];
  ...
}
for(int x = 0; x < number.length; x++) {
  int i = number[x];
}
final int len = number.length;
for(int j = 0; j < len; j++) {
  int i = number[j];
}
for(int x=0;x
这相当于:

for(int j = 0; j < number.length; j++) {
  int i = number[j];
  ...
}
for(int x = 0; x < number.length; x++) {
  int i = number[x];
}
final int len = number.length;
for(int j = 0; j < len; j++) {
  int i = number[j];
}
final int len=number.length;
对于(int j=0;j
请注意,forEach不会计算每个循环中的.length。 JVM也可以消除这一点,但在集合的情况下尤其如此, 有些人会使用

for(int j = 0; j < collection.size(); j++) {
for(int j=0;j
这对速度更快的人有(小)影响

int len = collection.size()
for(int j = 0; j < len; j++) {
int len=collection.size()
对于(int j=0;j
有点晚了,但就在这里

编译器知道您是对集合还是对数组使用for-each循环语句

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

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


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

这将给我0到length-1的值。它应该取数组元素的值,在示例代码中都是0。@PatriciaShanahan不正确,我的大括号中没有代码。我解释了Sugar后面的构造。谢谢,我不知道for-each循环没有eval如果您对问题的投票结果进行了评论,会对您有所帮助。如果您觉得有趣,尤其是在字节码基础上与普通(高效)问题等效,那么您可以对问题的投票结果进行评论循环。但没有人确切回答这个问题。对于引用类型的数组也是这样吗?例如,Java会在对象[]上内部使用此实现,还是会执行其他操作(例如将其转换为Iterable)?@Karakuri我甚至没有声称这是基本数组的实际实现方式,只是要求的行为是等效的。
Object[]
所要求的行为也是等效的。