以下 java 段将导致 NullPointException,因为变量列表为 null,传递给 for-each 循环。
List<> arr = null;
for (Object o : arr) {
System.out.println("ln "+o);
}
我认为for (Object o : arr){ }
相当于
for (int i = 0; i < arr.length; i++) { }
和/或
for (Iterator<type> iter = arr.iterator(); iter.hasNext(); ){
type var = iter.next();
}
无论哪种情况,arr 为 null 都会导致 arr.length 或 arr.iterator() 抛出 NullPointException
我只是好奇 for (Object o : arr){ }
的原因不是翻译成
if (arr!=null){
for (int i = 0; i < arr.length; i++) {
}
}
and
if (arr!=null){
for (Iterator<type> iter = arr.iterator(); iter.hasNext(); ){
type var = iter.next();
}
}
包含 arr!=null 表达式可以减少代码嵌套。
最佳答案
我看到以下原因,虽然我不知道是否有人考虑过这一点,何时实现,以及实际原因是什么。
正如您所演示的,for(:) 循环的当前行为非常容易理解。其他行为不是
这将是 java 世界中唯一以这种方式运行的东西。
它不等同于简单的 for 循环,因此在两者之间迁移实际上不等价
无论如何,使用 null 是一个坏习惯,因此 NPE 是告诉开发人员“你他妈的,清理你的烂摊子”的好方法,而建议的行为只会隐藏问题。
如果您想在循环之前或之后对数组执行任何其他操作,该怎么办...现在您的代码中将进行两次空值检查。
关于Java for-each 循环抛出 NullPointErexception,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16259435/