如何在 Java 中将 String 转换为 Boolean,但将 null 与 false 区别对待?
How to convert String to Boolean in Java, but to treat null differently than false?
我想知道是否有一种直接的方法(一行,无需创建函数)将 String
转换为 Java 中的 Boolean
,但在某种程度上 Boolean
是 null
如果 String
是 null
。
如果我没看错的话,如果输入字符串是 null
,Boolean
class 中的所有方法都会返回 false
。这是为什么?
为什么 Boolean.valueOf(String s)
returns false
在 s
为 null
的情况下比返回 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
,而 s
是 null
。然后,以下语句将抛出 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)
的其他原始包装器 类 的行为不一致 .例如,如果字符串参数是 null
,Integer.valueOf(String)
将抛出 NumberFormatException
。因此,真正的解释可能是 Boolean.valueOf(String)
语义只是一个不幸的异常,它是在匆忙发布 Java 1.0 时发生的疏忽的结果。
不过,那是猜测。要获得真正的答案,您需要查阅相关的内部 Sun / Oracle 文档来源(如果它们仍然存在)和/或与原始 Java 团队中的某个人交谈(如果他们还记得的话)。
我想知道是否有一种直接的方法(一行,无需创建函数)将 String
转换为 Java 中的 Boolean
,但在某种程度上 Boolean
是 null
如果 String
是 null
。
如果我没看错的话,如果输入字符串是 null
,Boolean
class 中的所有方法都会返回 false
。这是为什么?
为什么 Boolean.valueOf(String s)
returns false
在 s
为 null
的情况下比返回 null
更好?
您可以使用三元运算符:
String s = ...
Boolean b = s != null ? Boolean.valueOf(s) : null;
Why is it better that
Boolean.valueOf(String s)
returnsfalse
in the case ofs
beingnull
, rather than returningnull
?
因为 Java 中的内置功能称为 自动装箱。
让我们假设 Boolean.valueOf(String s)
是 实际上返回 null
,而 s
是 null
。然后,以下语句将抛出 NullPointerException
,因为 null
无法分配给原语:
boolean b = Boolean.valueOf(null);
Why is it better that
Boolean.valueOf(String s)
returnsfalse
in the case ofs
beingnull
, rather than returningnull
?
这是一个见仁见智的问题,而且(坦率地说)毫无意义地问...除非您碰巧正在设计自己的语言和运行时库。设计决定是在 20 多年前做出的,在语言被称为 "Java".
期间更改它的可能性为零Boolean.valueOf(String)
的 javadocs 没有提供任何关于设计者为什么这样设计的线索。
但是,很明显 Boolean.valueOf(String)
的行为 与 valueOf(String)
的其他原始包装器 类 的行为不一致 .例如,如果字符串参数是 null
,Integer.valueOf(String)
将抛出 NumberFormatException
。因此,真正的解释可能是 Boolean.valueOf(String)
语义只是一个不幸的异常,它是在匆忙发布 Java 1.0 时发生的疏忽的结果。
不过,那是猜测。要获得真正的答案,您需要查阅相关的内部 Sun / Oracle 文档来源(如果它们仍然存在)和/或与原始 Java 团队中的某个人交谈(如果他们还记得的话)。