【问题标题】:Java Boolean Class Variable Used in Comparisons比较中使用的 Java 布尔类变量
【发布时间】:2015-07-10 19:03:44
【问题描述】:

我有

Boolean condition;

public Boolean isCondition() { return condition; }

然后是否允许此方法的以下用法,与原语一样,

if (isCondition())
{
  //...
}

我会将它用于原语,但不确定类。是否需要检查 NULL 值?我需要先getBooleanValue() 吗?

【问题讨论】:

  • 你可以这样做,但你很难过,你必须检查空值。最好使用简单类型。
  • 由于Boolean是一个类,它可以为null。您可以返回boolean,因为它将是autoboxed
  • 感谢 Turing85。您可能的意思是,您可以返回一个布尔值(大写字母 B),因为它将自动装箱为布尔值(小写)。

标签: java


【解决方案1】:

是的,您可以使用任何盒装原语(在您的情况下为Boolean)作为原语本身;也就是说,如果您可以保证将 condition 设置为非空值,您的示例将起作用。

这里需要注意的是,如果任何已装箱的基元本身在拆箱时是nullyou will get a NullPointerException。如果您有可能将该值设为null,您应该重新评估您首先使用盒装原语的原因。改用未装箱的原语(在您的情况下为boolean)可能会更好。

【讨论】:

    【解决方案2】:

    是的,它需要根据null 进行检查,因为它是一个引用类型。在if 条件下完成的基本类型boolean 的自动拆箱依赖于调用Boolean#booleanValue(),如果condition 变量为null,则会抛出NPE。

    【讨论】:

      【解决方案3】:

      我找到了一个简单的解决方案,

      if(Boolean.TRUE.equals(isCondition()) ){ .. }
      

      这永远不会抛出 NPE,因为表达式在右侧,我们仍然可以比较它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-16
        • 2018-02-01
        • 1970-01-01
        • 2018-02-24
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 2014-04-30
        相关资源
        最近更新 更多