Java 8中switch语句传入null是否总会抛出NullPointerException?
问题解答
在Java 8到Java 17(Java 18引入null匹配特性之前)的版本中,往switch语句传入null一定会抛出NullPointerException,完全不可能命中default分支。
原因很明确:当switch的表达式是包装类型(比如示例里的Integer)时,Java会自动执行拆箱操作,把包装类型转成对应的基本类型(int)。而null根本没法完成拆箱,直接触发NullPointerException——这个异常发生在switch开始判断分支之前,代码连进入case或default分支的机会都没有。
你给出的代码里,switch (i)第一步就会尝试把Integer i拆箱成int,但i是null,拆箱失败抛出异常,自然到不了default分支执行打印逻辑。
补充说明:Oracle文档中提到的"default分支处理所有未被case分支显式处理的值",是基于表达式为有效非null值的前提,null并不属于这个范畴。
内容的提问来源于stack exchange,提问作者camilajenny
相关产品推荐
相关产品推荐

