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@orique
null
不是
Boolean
<布尔值的code>null实例将返回
false
。请参阅:
还有一种特殊的null类型,即表达式null的类型。
Boolean bNull = null;
System.print(Boolean.valueOf(bNull)); // -> NPE!