检查Integer Wrapper是否为NULL以及原始值0

时间:2017-07-24 11:02:03

标签: java autoboxing

我在发布这个问题之前已经提到了这一点 Checking Null Wrappers against primitive values

我的情况是,我想用{strong> Wrapper Integer 以及 null

检查0
if( statusId != null || statusId != 0 ) //statusId is Integer it maybe 0 or null
    // Do Somethimg here

我如何克服这种情况?

6 个答案:

答案 0 :(得分:7)

or替换为and

if( statusId != null && statusId != 0 ) 

只有当statusId不是null时才会有效:

statusId != null

您将尝试将statusId取消装箱到int

statusId != 0 

如果statusIdnull,则短路&&运算符将阻止抛出NullPointerException,因为statusId != 0将不会被评估点。

答案 1 :(得分:1)

如果你想摆脱null检查,那么你可以使用equals,例如:

Integer i = null;
if(Integer.valueOf(0).equals(i)){
    System.out.println("zero");
}else{
    System.out.println("not zero");
}

答案 2 :(得分:1)

问题是你让null通过第二次检查,并得到一个空指针。

等效工作逻辑:

if (!(statusId == null || statusId == 0)) {
}

答案 3 :(得分:0)

在这个帖子中已经有很多好的'经典'Java答案了,所以为了它...这里是Java 8:使用OptionalInt

假设statusIdOptionalInt,您可以写:

if(statusId.isPresent() && statusId.getAsInt() != 0)

或稍微更加隐秘,你可以这样做:

if(statusId.orElse(0) != 0)

在这种情况下,statusId永远不会设置为null;相反,它设置为OptionalInt.of(<some int>)OptionalInt.ofNullable(<some Integer>)OptionalInt.empty()

这个答案的要点是,从Java 8开始,标准库为基元提供方便的Optional和相关类来编写空安全Java代码。你可能想看看它们。 Optional因其filtermap方法而特别方便。

答案 4 :(得分:0)

刚才意识到为什么这个问题伤害了这么多。 实际上 关于一个错字(如果是这样,@ davidxxx&#39;答案是正确的)。它与逻辑等同性无关。

但是,它的价值在哪里。问题具体要求:

if( statusId != null || statusId != 0 )

即。 &#34;如果它不是空的&#34;它进入。或者&#34;如果它不是零&#34;它就会进入。

所以,实际上,解决方案是:

if (true)

答案 5 :(得分:0)

我不知道您的确切上下文,但您可以考虑使用Apache Commons Lang中的空值安全方法,例如:

if (ObjectUtils.defaultIfNull(statusId, 0) != 0)
  // Do Somethimg here