Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.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 无法初始化对象的增强for循环_Java_For Loop - Fatal编程技术网

Java 无法初始化对象的增强for循环

Java 无法初始化对象的增强for循环,java,for-loop,Java,For Loop,第二种类型的for使用Iterator按元素进行迭代。初始化引用d没有意义,因为此操作不会更改数组中的引用。增强型for循环中的循环变量是临时的。在循环体中指定它对原始项没有影响。以下是根据Java语言规范对循环的影响: 如果希望通过避免循环来缩短代码,请使用 for(final Day d:days) { d= new Day(5); // <<== Compile-time error } 当Java看到您创建的增强for循环时,它将运行您放入其中的任何内容,并生成一个

第二种类型的
for
使用
Iterator
按元素进行迭代。初始化引用
d
没有意义,因为此操作不会更改数组中的引用。

增强型
for
循环中的循环变量是临时的。在循环体中指定它对原始项没有影响。以下是根据Java语言规范对循环的影响:

如果希望通过避免循环来缩短代码,请使用

for(final Day d:days) {
    d= new Day(5); // <<== Compile-time error
}

当Java看到您创建的增强for循环时,它将运行您放入其中的任何内容,并生成一个新变量(称为
d
),并为该变量提供数组中任何内容的值。将
d
设置为新的一天(5)您正在更改变量
d
的值,而不是数组中的值。以下是一个解决方法:

Arrays.setAll(days, i -> new Day(5));
protectedd[]天=新的一天[n];

对于(int i=0;i您不能这样做。
d
是单元格的内容。您不能分配给它;它只是一个副本。但我不知道为什么它会导致NPE。您可以分配给它,它不会影响任何事情。我不明白您为什么会有NullPointerException。它在循环中作为@Oliver Charlesworth在
天不应该做任何更改说。你能显示stacktrace吗?@davidxxx当他们试图在他们认为实际上在数组中的对象上运行时,可能出现了NullPointerException。@Yorickis可能是最好的。但在这种情况下,这对我们来说不是一个可复制的问题。
Day[] days = ...
for (int i = 0; i < days.length; i++) {
     Day d = days[i];
     ...
}
for(final Day d:days) {
    d= new Day(5); // <<== Compile-time error
}
Arrays.setAll(days, i -> new Day(5));
protected D[] days = new Day [n];
for(int i = 0;i<days.length;i++)
   days[i] = new Day(5);