将布尔值传递给需要布尔值的方法

问题描述

我正在将 Boolean 值传递给具有 boolean 参数的方法

当我的值为 null 时会发生什么?它会为方法中的参数分配一个认值,例如 false 还是会导致任何问题?

解决方法

拆箱

当您调用一个需要 boolean 但给它 Boolean 的方法时,Java 必须拆箱该值。这会自动且隐式地发生。

因此,在编译过程中,Java 会替换您的调用

foo(value);

foo(value.booleanValue());

此过程在JLS,chapter 5.1.8. Unboxing Conversion中有详细说明:

在运行时,拆箱转换过程如下:

  • 如果 rBoolean 类型的引用,则拆箱转换会将 r 转换为 r.booleanValue()

拆箱 null

现在,当 valuenull 时,此语句在运行时显然会导致 NullPointerException,因为您正在尝试对变量调用方法 (booleanValue)不涉及任何实例。

所以你的代码崩溃了,它不会使用任何默认值作为后备。 Java 的设计考虑了快速失败


换成false

如果您希望该方法接收 false 作为回退值,您必须自己明确编码。例如:

foo(value == null ? false : value);