我在java中有一个小问题,我在“增强for循环”中分配了我的对象。 我试过这样的东西,后来给了我nullPointerException:
SomeClass tab[] = new SomeClass[100];
for( SomeClass x : tab){
x = new SomeClass();
}
所以......早些时候我用C ++编写代码,只需添加& amp;就可以以任何方式进行编辑(并确保分配内存)对象。运营商,像这样:
SomeClass *tab = new SomeClass[100];
for( auto & x : tab){
x = new SomeClass();
}
......一切顺利。但它在java中是怎么回事?有没有办法在分配一些内存时使用这个for循环?
答案 0 :(得分:2)
不,您不能使用增强的for循环来初始化数组的元素。声明的变量(此处为x
)是一个单独的变量,它引用数组中的当前元素。它是null
,因为你刚刚声明了数组。您正在更改x
以引用新的SomeClass
,但这根本不会影响数组。
0 | 1 | 2 | ...
-------------------------
| | | | ...
v
null <--- x
分配到x:
之后0 | 1 | 2 | ...
-------------------------
| | | | ...
v
null
x --> new SomeClass()
Java变量与此行为中的C ++引用不同。分配Java引用变量不会影响可能引用同一对象的任何其他内容。
您必须使用需要索引的数组访问表达式。标准的for
循环可以在这里使用。
SomeClass tab[] = new SomeClass[100];
for (int i = 0; i < tab.length; i++)
{
tab[i] = new SomeClass();
}