我想知道在Java中是否有一种简单的方法(一行代码,无需创建函数)将String
转换为Boolean
,但是如果String
为null
,则Boolean
为null
。
如果我理解正确,Boolean
类中的所有方法都会在输入字符串为null
时返回false
。为什么会这样呢?
为什么Boolean.valueOf(String s)
在s
为null
的情况下返回false
比返回null
更好呢?
s
为null
的情况下,Boolean.valueOf(String s)
返回false
比返回null
更好?Boolean.valueOf(String s)
实际上返回null
,那么以下语句将抛出NullPointerException
,因为无法将null
赋值给基本类型:false
,则不会发生异常,因为false
可以安全地分配给boolean
类型。boolean b = Boolean.valueOf(null);
Integer.parseInt(null)
会抛出 NumberFormatException(null)
- 难道自动装箱也适用于此吗? - vikingsteveBoolean.parseBoolean
而不是 valueOf
。一个错误的习惯,通过多余的装箱和立即拆箱的过程,如何能够证明任何 API 设计决策的正确性呢? - Marko TopolnikBoolean.valueOf(String s)
返回false
而不是返回null
,当s
为空时呢?Boolean.valueOf(String)
的javadoc并没有提供任何关于为什么设计成这样的线索。Boolean.valueOf(String)
的行为与其他基本包装类的valueOf(String)
的行为是不一致的。例如,如果字符串参数为null,则Integer.valueOf(String)
将抛出NumberFormatException
。因此,真正的解释可能是Boolean.valueOf(String)
语义只是不幸的异常情况,这是在匆忙发布Java 1.0时发生的疏忽造成的。Boolean.getBoolean
,这个API中最为扭曲的巅峰显然可以追溯到Java早期,实际上有充分的理由在系统属性缺失时返回false
。当然,它在内部依赖于Boolean.parseBoolean
的API。 - Marko TopolnikString s = ...
Boolean b = s != null ? Boolean.valueOf(s) : null;
Boolean.valueOf()
的实际功能比返回null更好? - vikingsteve
Optional.ofNullable(s).map(Boolean::valueOf).orElse(null)
是一种替代方法。这对于处理Optional对象特别有用。 - Adrian Leonhard