在Java中使用for循环,我是否必须指定not null?

Lan*_*ker 7 java arrays null for-loop

好吧,我有一个原始的对象数组,因为我无法从数组中删除它们,我改为将数组中对象的位置更改为null.但是,如果我想以下列方式迭代数组中的每个对象:

for (Derp derp : derps){
     derp.herp++;
}
Run Code Online (Sandbox Code Playgroud)

我必须这样做吗?

for (Derp derp : derps){
     if (derp != null){
     derp.herp++;
     }
}
Run Code Online (Sandbox Code Playgroud)

或者我第一次拥有它会没事吗?for循环'知道'它只需要迭代Derp对象,而不是空对象,因为我已经将它声明为Derp对象吗?或者它可能只是将它视为Derp对象,因为我已经说过它会在尝试迭代非Derp对象时导致错误?或者null仍然是一个Derp对象,只有一个为null?它是什么,我可以使用什么代码?

或者,如何从基本数组中删除对象而不留下空对象并实际缩短基本数组的长度?

Sur*_*tta 6

这个更好.

for (Derp derp : derps){
     if (derp != null){
     derp.herp++;
     }
}
Run Code Online (Sandbox Code Playgroud)

第一个抛出nullpointer exception.if任何值都是 null

如何从基本数组中删除对象而不留下空对象.

一旦将内存分配给数组中的该元素,您至少可以做到null.

实际上缩短了原始数组的长度?

不是.在声明自己时它是固定的.减速后你不能改变长度.

阵列很久以前就死了.你最好的选择是List有益的

  • Positional access - 根据列表中的数字位置操纵元素.这包括get,set,add,addAll和remove等方法.
  • Search - 搜索列表中的指定对象并返回其数字位置.搜索方法包括indexOf和lastIndexOf.
  • Iteration - 扩展Iterator语义以利用列表的顺序特性.listIterator方法提供此行为.
  • Range-view - 子列表方法对列表执行任意范围操作.


Sam*_*ley 5

Null 是一个有效的列表项,因此您需要检查它。

您不能简单地从原始数组中删除元素。您可以使用更高级的结构,例如可以删除元素的 ArrayList。以下两个示例是从列表中删除所有 NULL 值的单行程序。

list.removeAll(Collections.singleton(null));
Run Code Online (Sandbox Code Playgroud)

或者

list.removeAll(Arrays.asList(new Object[]{null})); 
Run Code Online (Sandbox Code Playgroud)