meh*_*anc 8 java syntax for-loop
我会快速解决这个问题.我有一个简单的课程
class Vector{
float x, y;
}
Run Code Online (Sandbox Code Playgroud)
另一个类有这些对象的数组作为其成员
Vector[] buffer;
Run Code Online (Sandbox Code Playgroud)
我像这样初始化它:
buffer = new Vector[8];
for(Vector v: buffer)
v = new Vector();
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在这个数组中访问这个对象的成员时,我直接得到一个NullPointerException到我的堆栈跟踪.也就是说,尚未构造数组的对象.另一方面,这个更传统的代码非常完美:
buffer = new Vector[8];
for(int i = 0; i<8; i++)
buffer[i] = new Vector;
Run Code Online (Sandbox Code Playgroud)
正如本讨论所指出的那样,编译后两者都应该相同.
我的问题是,为什么每个循环都无法从项目数组初始化/构造对象?
在for-each示例中,您将覆盖循环的局部变量,该变量不会保存回数组中.它类似于你的第二个循环:
for(int i = 0; i < buffer.length; i++){
Vector v = buffer[i];
v = new Vector();
}
Run Code Online (Sandbox Code Playgroud)
查看基于相同问题的了解Java中的每个循环.
两个循环对于访问数组中的元素是相同的,但不是用于初始化它们.当你在这个场景中使用for-each循环时,它就像在做
for(int x = 0; x < array.length; x++) {
Vector v = array[x];
v = new Vector();
}
Run Code Online (Sandbox Code Playgroud)
您没有将新分配给Vector数组,而是将其分配给局部变量.
| 归档时间: |
|
| 查看次数: |
2552 次 |
| 最近记录: |