我有以下代码:
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
为什么我检查布尔变量"bool"会导致异常?当它"看到"它不是真的时,它不应该跳过if语句吗? 当我删除if语句或检查它是否为null时,异常消失.
Avr*_*gon 360
如果您不喜欢额外的空检查:
if (Boolean.TRUE.equals(value)) {...}
Run Code Online (Sandbox Code Playgroud)
K-b*_*llo 159
当你有boolean它可以是true或false.然而,当你有一个Boolean它可以是Boolean.TRUE,Boolean.FALSE或null任何其他对象.
在您的特定情况下,您的Booleanis null和if语句触发隐式转换,boolean从而生成NullPointerException.您可能需要:
if(bool != null && bool) { ... }
Run Code Online (Sandbox Code Playgroud)
Jos*_*ter 67
(如果峰值性能是项目中最重要的优先级,那么请查看不需要包含外部库的本机解决方案的其他答案之一.)
不要重新发明轮子.利用已经构建和使用的内容isTrue():
BooleanUtils.isTrue( bool );
Run Code Online (Sandbox Code Playgroud)
检查Boolean值是否为真,null返回处理false.
如果你不限于你被"允许"包含的库,那么各种用例都有很多很棒的帮助函数,包括Booleans和Strings.我建议你仔细阅读各种Apache库,看看它们已经提供了什么.
pro*_*ota 18
或者借助 Java 8 Optional 的强大功能,您也可以这样做:
Optional.ofNullable(boolValue).orElse(false)
Run Code Online (Sandbox Code Playgroud)
:)
fas*_*ava 13
Boolean类型可以null.您需要在null设置时进行检查null.
if (bool != null && bool)
{
//DoSomething
}
Run Code Online (Sandbox Code Playgroud)
Boolean是原始布尔值的对象包装类.这个类和任何类一样,确实可以为null.出于性能和内存的原因,最好使用原语.
Java API中的包装类有两个主要用途:
http://en.wikipedia.org/wiki/Primitive_wrapper_class
| 归档时间: |
|
| 查看次数: |
158203 次 |
| 最近记录: |