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

Passing Boolean to method that expects boolean

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

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

开箱

当您调用需要 boolean 的方法但给它 Boolean 时,Java 必须 unbox 值。这是自动和隐式发生的。

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

foo(value);

来自

foo(value.booleanValue());

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

At run time, unboxing conversion proceeds as follows:

  • If r is a reference of type Boolean, then unboxing conversion converts r into r.booleanValue()

开箱null

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

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


改用false

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

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