当前位置:  开发笔记 > 编程语言 > 正文

为什么这个for-each循环不起作用?

如何解决《为什么这个for-each循环不起作用?》经验,为你挑选了2个好方法。

在这段代码中,为什么我的数组不是按照我想要的那样初始化的?for-each循环是不是设计成这样做的,还是我只是没有正确使用它?

    int[] array = new int[5];

    //initialise array -> Doesn't work! Array still full of 0's
    for(int i : array)
        i = 24;

Eddie.. 15

for-each循环不适用于这种情况.您不能使用for-each循环来初始化数组.你的代码:

int[] array = new int[5];
for (int i : array) {
    i = 24;
}

将翻译成以下内容:

int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
    int i = array[j];
    i = 24;
}

如果这是一个对象数组,它仍然会失败.基本上,for-each依次将集合或数组中的每个条目分配给您提供的变量,然后您可以使用该变量.该变量等于数组引用.这只是一个变量.

For-each不能用于初始化任何数组或Collection,因为它遍历数组或Collection的当前内容,每次为您提供一个.for-each中的变量不是数组或Collection引用的代理.编译器不会将" i"(从" int i")替换为" array[index]".

例如,如果您有一个Date数组,请尝试以下代码:

Date[] array = new Date[5];
for (Date d : array) {
    d = new Date();
}

会被翻译成这样的东西:

Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
    Date d = array[i];
    d = new Date();
}

你可以看到它不会初始化数组.最终将得到一个包含所有空值的数组.

注意:我使用上面的代码,将其编译成.class文件,然后使用jad对其进行反编译.此过程为我提供了以下代码,由上面的代码中的Sun Java编译器(1.6)生成:

int array[] = new int[5];
int ai[];
int k = (ai = array).length;
for(int j = 0; j < k; j++)
{
    int i = ai[j];
    i = 5;
}


Nikhil Chell.. 5

i只是数组中该点的int副本,而不是对它的引用.在这种情况下,for-each循环不起作用.



1> Eddie..:

for-each循环不适用于这种情况.您不能使用for-each循环来初始化数组.你的代码:

int[] array = new int[5];
for (int i : array) {
    i = 24;
}

将翻译成以下内容:

int[] array = new int[5];
for (int j = 0; j < array.length; j++) {
    int i = array[j];
    i = 24;
}

如果这是一个对象数组,它仍然会失败.基本上,for-each依次将集合或数组中的每个条目分配给您提供的变量,然后您可以使用该变量.该变量等于数组引用.这只是一个变量.

For-each不能用于初始化任何数组或Collection,因为它遍历数组或Collection的当前内容,每次为您提供一个.for-each中的变量不是数组或Collection引用的代理.编译器不会将" i"(从" int i")替换为" array[index]".

例如,如果您有一个Date数组,请尝试以下代码:

Date[] array = new Date[5];
for (Date d : array) {
    d = new Date();
}

会被翻译成这样的东西:

Date[] array = new Date[5];
for (int i = 0; i < array.length; i++) {
    Date d = array[i];
    d = new Date();
}

你可以看到它不会初始化数组.最终将得到一个包含所有空值的数组.

注意:我使用上面的代码,将其编译成.class文件,然后使用jad对其进行反编译.此过程为我提供了以下代码,由上面的代码中的Sun Java编译器(1.6)生成:

int array[] = new int[5];
int ai[];
int k = (ai = array).length;
for(int j = 0; j < k; j++)
{
    int i = ai[j];
    i = 5;
}



2> Nikhil Chell..:

i只是数组中该点的int副本,而不是对它的引用.在这种情况下,for-each循环不起作用.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有