Java - 增强for循环中的分配

时间:2015-06-16 18:36:17

标签: java for-loop memory

我在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循环?

1 个答案:

答案 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();
}