繁体   English   中英

Java-增强的for循环中的分配

[英]Java - allocation in enhanced for loop

我在Java中有一个小问题,在“增强循环”中分配了我的对象。 我尝试过这样的事情,后来给了我nullPointerException:

SomeClass tab[] = new SomeClass[100];
for( SomeClass x : tab){
  x = new SomeClass();
}

所以...早些时候,我用C ++编写代码,并且只需添加&运算符,就可以用任何方式(并确保还分配内存)进行编辑,如下所示:

SomeClass *tab = new SomeClass[100];
for( auto & x : tab){
  x = new SomeClass();
}

...而且一切正常。 但是在Java中如何? 是否分配一些内存,是否有任何方法可以使用此for循环?

不,您不能使用增强的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();
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM