[英]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.