Java Boolean.valueOf(String)能否返回null?
Java Boolean.valueOf(String)能否返回null?,java,boolean,Java,Boolean,Boolean.valueOf(String)是否可以返回null?从java中可以看到,文档只指定返回true的时间。否则总是返回false,还是可以返回null?在我所做的测试中,我无法让它返回null,但我想确定一下 本质上,我想知道以下代码是否安全,不会出现NullPointerException: boolean b = Boolean.valueOf(...); 文档的回答是:不。它将返回一个表示真或假的布尔值 委员会: 不,不会的。如果在参数中放置null,或者如果字符串设置为
Boolean.valueOf(String)
是否可以返回null?从java中可以看到,文档只指定返回true的时间。否则总是返回false,还是可以返回null?在我所做的测试中,我无法让它返回null,但我想确定一下
本质上,我想知道以下代码是否安全,不会出现NullPointerException:
boolean b = Boolean.valueOf(...);
文档的回答是:不。它将返回一个表示真或假的
布尔值
委员会:
不,不会的。如果在参数中放置null,或者如果字符串设置为null,则返回的布尔值为false。您可以在Java文档中看到预期的输入和输出:不,这是不可能的。请参阅类的源代码Boolean
:
public static Boolean valueOf(String s) {
return toBoolean(s) ? TRUE : FALSE;
}
。。然后:
private static boolean toBoolean(String name) {
return ((name != null) && name.equalsIgnoreCase("true"));
}
实际上,它可能导致NPE,但不能返回null。试试这个:
Boolean bNull = null;
System.print(Boolean.valueOf(bNull)); // -> NPE!
这是因为Boolean.valueOf()接受String
或Boolean
值。由于bNull
属于Boolean
类型,因此java尝试取消绑定bNull
值,将其作为Boolean
传递,从而导致NPE。这很有趣,但实际上很愚蠢。。。另外,Number
也没有Boolean.valueOf()
,为什么不查看源代码呢。只有一行。在此论坛中发布问题将花费比查看来源更多的时间:)未意识到来源可用。下次会的,谢谢。注意来源可能会有所不同。有很多JVM。因此,如果它不能返回null…为什么要返回对象引用Boolean
,而不是原语类型Boolean
?只是想知道原因是什么。Javadocs没有指定它是何时引入的,但我猜它早于Java1.5,在Java1.5中引入了自动装箱。因此,如果您有一个boolean
并且需要一个boolean
(无论出于何种原因),那么您就需要手动调用boolean.valueOf(booleanPrimitive)
。整个过程应该是Boolean b=Boolean.valueOf(Boolean.valueOf(myString))
。我猜他们认为这是一个足够普遍的用例,他们想缩短它。但这只是猜测。另一方面,如果您需要原语(没有自动装箱),它只是Boolean.valueOf(myString.booleanValue()
,它没有嵌套,因此更易于阅读。所以基本上,无论哪种方式,他们都不会满足所有的用例,所以他们选择了其中的一个——要么是因为他们认为它更常见,要么是因为他们认为它更通用(因为它更容易转换成另一个),要么是因为其他一些原因。对于这个答案,他们必须三思。规范说“(…)返回一个值为(…)的布尔值”。这隐含地排除了返回的null,但我认为措辞不清楚enough@oriquenull
不是Boolean
<布尔值的code>null实例将返回false
。请参阅:还有一种特殊的null类型,即表达式null的类型。
Boolean bNull = null;
System.print(Boolean.valueOf(bNull)); // -> NPE!