如何在 Java 中将 String 转换为 Boolean,但将 null 与 false 区别对待?

How to convert String to Boolean in Java, but to treat null differently than false?

我想知道是否有一种直接的方法(一行,无需创建函数)将 String 转换为 Java 中的 Boolean,但在某种程度上 Booleannull 如果 Stringnull

如果我没看错的话,如果输入字符串是 nullBoolean class 中的所有方法都会返回 false。这是为什么?

为什么 Boolean.valueOf(String s) returns falsesnull 的情况下比返回 null 更好?

您可以使用三元运算符:

String s = ...
Boolean b = s != null ? Boolean.valueOf(s) : null;

Why is it better that Boolean.valueOf(String s) returns false in the case of s being null, rather than returning null?

因为 Java 中的内置功能称为 自动装箱

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

boolean b = Boolean.valueOf(null);

Why is it better that Boolean.valueOf(String s) returns false in the case of s being null, rather than returning null?

这是一个见仁见智的问题,而且(坦率地说)毫无意义地问...除非您碰巧正在设计自己的语言和运行时库。设计决定是在 20 多年前做出的,在语言被称为 "Java".

期间更改它的可能性为零

Boolean.valueOf(String) 的 javadocs 没有提供任何关于设计者为什么这样设计的线索。

但是,很明显 Boolean.valueOf(String) 的行为 valueOf(String) 的其他原始包装器 类 的行为不一致 .例如,如果字符串参数是 nullInteger.valueOf(String) 将抛出 NumberFormatException。因此,真正的解释可能是 Boolean.valueOf(String) 语义只是一个不幸的异常,它是在匆忙发布 Java 1.0 时发生的疏忽的结果。

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