好吧,我有一个原始对象数组,因为我不能从数组中删除它们,所以我改为将对象在数组中的位置更改为 null。但是,如果我想通过以下方式遍历数组中的每个对象:
for (Derp derp : derps){
derp.herp++;
}
我必须做这样的事情吗?
for (Derp derp : derps){
if (derp != null){
derp.herp++;
}
}
或者我的第一种方式会好吗? for 循环是否会“知道”它只需要迭代 Derp 对象,而不是空对象,因为我已经将它声明为 Derp 对象?或者它只是把它当作一个 Derp 对象,因为我已经说过它会是,并且当它试图迭代一个非 Derp 对象时会导致错误?还是 null 仍然是一个 Derp 对象,只是一个为 null 的对象?它是哪个,我可以使用什么代码?
或者,如何从原始数组中删除一个对象而不留下空对象并实际缩短原始数组的长度?
最佳答案
这样更好。
for (Derp derp : derps){
if (derp != null){
derp.herp++;
}
}
第一个抛出空指针异常。如果任何值为null
how can I remove an object from a primitive array and not leave a null object.
一旦内存分配给数组中的那个元素,您至少可以做的就是让它成为null
。
actually shorten the length of the primitive array?
没有。自己声明的时候是固定的,减速后不能改变长度。
数组很久以前就死了。你最好的选择是 List
有以下好处
Positional access
— 根据元素的数值操作元素 列表中的位置。这包括 get、set、add 等方法, 添加所有,并删除。Search
— 在列表中搜索指定对象并返回其 数字位置。搜索方法包括 indexOf 和 lastIndexOf。Iteration
— 扩展 Iterator 语义以利用 列表的顺序性质。 listIterator 方法提供了这个 行为。Range-view
— 子列表方法执行任意范围操作 在名单上。
关于java - 在 Java 中使用 for 循环,是否必须指定 not null?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19651241/