如何在检查数组中的null值时避免Null Pointer Exception
解决数组检测null时的Null Pointer Exception问题
你的代码抛出NPE的核心原因是:当word为null时,你先执行了word.equals("first")——null对象无法调用任何方法,这直接触发了空指针异常。另外你的条件逻辑也存在问题:word == null和!word.equals(...)不可能同时成立,因为word为null时根本走不到后面的判断。
修复步骤
- 调整判断顺序,优先检查null:利用逻辑与
&&的短路特性,把word == null放在条件最前面,这样当word是null时,后面的equals判断不会执行,从根源避免NPE。 - 修正逻辑:如果需求是检测数组中存在null值就提示,不需要额外判断是否等于"first"或"second";如果是想排除"first"和"second"后检测其他位置的null,可简化逻辑(null本身就不是这两个字符串)。
修复后的代码
需求1:只要数组存在null就提示
String [] s = {null,"first","890808908","4545645646","989809908098","65756756757","second"}; for (String word : s){ if (word == null){ System.out.println("yes there is null value"); } }
需求2:排除"first"和"second"后,检测其他元素中的null
String [] s = {null,"first","890808908","4545645646","989809908098","65756756757","second"}; for (String word : s){ // 先判断null,再排除指定字符串 if (word == null) { System.out.println("yes there is null value"); } else if (!word.equals("first") && !word.equals("second")) { // 处理非first/second的非null元素 } }
额外优化建议
如果使用Java 8+,可以用流操作更简洁地检测null:
import java.util.Arrays; import java.util.Objects; public class Main { public static void main(String[] args) { String [] s = {null,"first","890808908","4545645646","989809908098","65756756757","second"}; boolean hasNull = Arrays.stream(s).anyMatch(Objects::isNull); if (hasNull) { System.out.println("yes there is null value"); } } }
这种方式更简洁,也避免了手动循环可能出现的逻辑错误。
内容的提问来源于stack exchange,提问作者KKir
相关产品推荐
相关产品推荐

