Java 中 'for each' 和 'for' 循环的不同结果



我试图将所有元素设置为定义类的数组中的所有元素。我刚刚了解了一个面孔循环的用法,所以我尝试了以下内容:

for(MyClass element:array){
    element=null;
}

但是,这在编译后不起作用,并且有一个警告"不使用局部变量元素的值"。我尝试了循环的常态,它正常工作:

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

我的问题是,为什么for-each循环不起作用?我对它的用法有一些误解吗?

考虑您有以下示例:

String array[] = {"Hello", "Java"};
for (String element : array) {
    element = null;
}

实际上,element是一个变量,我可以在循环中使用,而不是数组的真实元素,这等效于:

String array[] = {"Hello", "Java"};
for (int i = 0; i < array.length; i++) {
    String element = array[i];
    element = null;
}

因此,当您使用element = null时,这不会更改数组的值(array[i](。

希望您得到它。

仅读取,如果设置元素的值,则不会在阵列本身中更改它,而只能在循环内!示例:

    public class MainClass {
        public static void main(String args[]) {
            int nums[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
            for(int x : nums) {
              System.out.print(x + " "); 
              x = x * 10; // no effect on nums
            }
            System.out.println();
            for(int x : nums) 
              System.out.print(x + " "); 
            System.out.println();
        }  
    }

打印:

1 2 3 4 5 6 7 8 9 10 
1 2 3 4 5 6 7 8 9 10

旁注:如果您要做的就是用 null填充数组,则可以避免使用

for循环
Java.util.Arrays.fill(array, null);

当然,您会错过机会学习有关for-each和常规for之间差异的宝贵教训。

相关内容

  • 没有找到相关文章

最新更新