【发布时间】:2013-11-08 04:42:17
【问题描述】:
好吧,我有一个原始的对象数组,因为我无法从数组中删除它们,所以我将对象在数组中的位置更改为 null。但是,如果我想遍历数组中的每个对象,可以通过以下方式:
for (Derp derp : derps){
derp.herp++;
}
我必须这样做吗?
for (Derp derp : derps){
if (derp != null){
derp.herp++;
}
}
或者我第一种方式会很好吗? for 循环是否会“知道”它只需要遍历 Derp 对象,而不是 null 对象,因为我已将其声明为 Derp 对象?或者它只是将它视为一个 Derp 对象,因为我已经说过它会这样,并且当它尝试迭代非 Derp 对象时会导致错误?还是 null 仍然是一个 Derp 对象,只是一个为 null 的对象?它是什么,我可以使用什么代码?
另外,我怎样才能从原始数组中删除一个对象而不留下一个空对象并实际缩短原始数组的长度?
【问题讨论】:
-
它将遍历数组中的每个元素,无论它是否为空,因此您需要进行空检查。顺便说一句,这很容易测试。
-
肯定会遍历所有内容,无论是否为空
-
@user2901402 使用
ArrayList而不是Array来消除NullPointerException的可能性,否则在迭代数组时必须检查不为空。您的第二个选项适用于 Array。