问题描述
我正在将 Boolean
值传递给具有 boolean
参数的方法。
当我的值为 null
时会发生什么?它会为方法中的参数分配一个默认值,例如 false
还是会导致任何问题?
解决方法
拆箱
当您调用一个需要 boolean
但给它 Boolean
的方法时,Java 必须拆箱该值。这会自动且隐式地发生。
因此,在编译过程中,Java 会替换您的调用
foo(value);
由
foo(value.booleanValue());
此过程在JLS,chapter 5.1.8. Unboxing Conversion中有详细说明:
在运行时,拆箱转换过程如下:
- 如果
r
是Boolean
类型的引用,则拆箱转换会将r
转换为r.booleanValue()
拆箱 null
现在,当 value
为 null
时,此语句在运行时显然会导致 NullPointerException
,因为您正在尝试对变量调用方法 (booleanValue
)不涉及任何实例。
所以你的代码崩溃了,它不会使用任何默认值作为后备。 Java 的设计考虑了快速失败。
换成false
如果您希望该方法接收 false
作为回退值,您必须自己明确编码。例如:
foo(value == null ? false : value);