在Java中,基元数组如何处理new for each循环?
我知道new for each循环适用于Iterable和数组,但我不知道在使用数组时幕后会发生什么 有人能帮我理解吗?提前谢谢在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
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[]
所要求的行为也是等效的。