将布尔值传递给需要布尔值的方法
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
现在,当 value
为 null
时,此语句显然会在运行时导致 NullPointerException
,因为您正试图调用一个方法 (booleanValue
)一个不引用任何实例的变量。
所以你的代码崩溃了,它不会使用任何默认值作为回退。 Java 的设计考虑了 快速失败 。
改用false
如果您希望该方法接收 false
作为回退值,您必须自己明确编码。例如:
foo(value == null ? false : value);
我正在将 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 typeBoolean
, then unboxing conversion convertsr
intor.booleanValue()
开箱null
现在,当 value
为 null
时,此语句显然会在运行时导致 NullPointerException
,因为您正试图调用一个方法 (booleanValue
)一个不引用任何实例的变量。
所以你的代码崩溃了,它不会使用任何默认值作为回退。 Java 的设计考虑了 快速失败 。
改用false
如果您希望该方法接收 false
作为回退值,您必须自己明确编码。例如:
foo(value == null ? false : value);