Java ForEach 语句判断是否为空
一段犯错的代码
在程序中,有一段获取历史数据并循环处理的逻辑,有一天忽然报空指针异常,大致逻辑如下:
提示是在第二行报错,分析原因可能getButtons()返回null,
然后我写了一段测试代码:
异常如下:
分析原因
之前一直以为forEach方法可以循环null数据,但是这次的bug让我明白原来不行,那么到底是为什么呢,于是我用ByteCode Outline工具查看了一下字节码:
以上字节码的大致逻辑是
创建一本地变量1然后赋值
调用
变量1
上的iterator()
方法返回一个Iterator对象,存储在变量3
中继续调用Iterator对象的
hasNext()
和next()
方法返回List中的对象,存储在变量2
中对返回的对象进行操作…
由以上字节码可以看出,Java对forEach的支持是通过将其转换为Iterator来实现的,所以对于null引用会直接报空指针异常。
版权声明: 本文为 InfoQ 作者【引花眠】的原创文章。
原文链接:【http://xie.infoq.cn/article/8d0f2afaf0b6af729c91b5532】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论