我试图将所有元素设置为定义类的数组中的所有元素。我刚刚了解了一个面孔循环的用法,所以我尝试了以下内容:
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
之间差异的宝贵教训。