如何在Java中将String转换为Boolean,但是以不同于false的方式处理null?

Bra*_*nex 8 java boolean

我在想,如果有一个简单的方法(一个在线,而无需创建一个功能)转换StringBooleanJava中,但在某种程度上说Booleannull如果Stringnull.

如果我看到它正确,如果输入字符串是,则Boolean类中的所有方法都将返回.这是为什么?falsenull

为什么在存在而不是返回的情况下Boolean.valueOf(String s)返回更好? falsesnullnull

Kon*_*kov 7

为什么在存在而不是返回的情况下Boolean.valueOf(String s)返回更好?falsesnullnull

因为Java中的内置功能,称为autoboxing.

让我们假设Boolean.valueOf(String s) 实际的返回null,当snull.然后,以下语句将抛出NullPointerException,因为null无法分配给基元:

boolean b = Boolean.valueOf(null);
Run Code Online (Sandbox Code Playgroud)

  • 好点.但是为什么`Integer.parseInt(null)`throw`DumberFormatException(null)` - 自动装箱是否也适用于那里? (2认同)

Ste*_*n C 6

为什么在存在而不是返回的情况下Boolean.valueOf(String s)返回更好?falsesnullnull

这是一个意见问题,并且(坦率地说)要求毫无意义......除非您碰巧设计自己的语言和运行时库.设计决策是在20多年前做出的,当语言被称为"Java"时,它将被改变的可能性为零.

javadocs Boolean.valueOf(String) 并没有提供任何关于设计师为何如此设计它的线索.

然而,很明显的行为Boolean.valueOf(String)不一致的以行为valueOf(String)为其他原始包装类.例如,如果字符串参数是,则Integer.valueOf(String)抛出.因此,真正的解释可能是语义只是一个不幸的异常现象,这是在发布Java 1.0时出现疏忽的结果.NumberFormatExceptionnullBoolean.valueOf(String)

然而,这是猜测.要获得真正的答案,您需要查阅相关的内部Sun/Oracle文档源(如果它们仍然存在)和/或与原始Java团队中的某个人交谈.