Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java中检查整数是null还是零?_Java - Fatal编程技术网

如何在Java中检查整数是null还是零?

如何在Java中检查整数是null还是零?,java,Java,有没有更简洁的写作方式: if (myInteger != null && myInteger != 0) { ... } 例如,对于字符串,您可以使用StringUtils.isBlank(),具体取决于myInteger的实现(即,如果myInteger中的Integer属性是框类型Integer或未装箱的原语int),您可能只需要编写一个条件 Integers是实际对象,这意味着它们可以null。也就是说,它们也可以将0作为一个值。因此,在这种情况下,您必须进行两项检查

有没有更简洁的写作方式:

if (myInteger != null && myInteger != 0) { ... }

例如,对于字符串,您可以使用
StringUtils.isBlank()

,具体取决于
myInteger
的实现(即,如果
myInteger
中的Integer属性是框类型
Integer
或未装箱的原语
int
),您可能只需要编写一个条件

Integer
s是实际对象,这意味着它们可以
null
。也就是说,它们也可以将0作为一个值。因此,在这种情况下,您必须进行两项检查


int
是原语,不能保存
null
的值。在这种情况下,您只需检查您的
int
属性是否不等于0。

对此,我将使用三元条件。比如:

public static boolean isNullorZero(Integer i){
    return 0 == ( i == null ? 0 : i);
}
这是不可读的,我同意;)

使用Java 8:

if (Optional.ofNullable(myInteger).orElse(0) != 0) {
  ...
}

请注意,
Optional
可能会帮助您完全避免if条件,具体取决于您的用例…

由于问题中提到了
StringUtils
类,我假设项目中已经使用了Apache Commons库

然后,您可以使用以下选项:

if (0 != ObjectUtils.defaultIfNull(myInteger, 0)) { ... }
或使用静态导入:

if (0 != defaultIfNull(myInteger, 0)) { ... }

我创建了一个helper方法,可能可以帮助您,它使用反射,所以您必须考虑是否有必要使用它,您还需要Java8

该方法适用于所有java编号:

 public class NumberUtils {

    private NumberUtils(){
    }

    public static  < T extends Number>  T getNumberOrZero(T number, Class<? extends Number> clazz) {
        return Optional.ofNullable(number)
                .orElse(getZeroValue(clazz));
    }

    @SuppressWarnings("unchecked")
    private static < T extends Number> T getZeroValue( Class<? extends Number> clazz){
        try{
            Constructor<? extends Number> constructor = clazz.getDeclaredConstructor(String.class);
            return (T) constructor.newInstance("0");
        }catch (ReflectiveOperationException e) {
            throw new IllegalArgumentException("Can't get zero value ", e);
        }
    }
}
我希望这能帮助你

private boolean isNullOrZero(Integer i){
     return i == null || i.intValue() == 0;
}
对于某些其他类型:

i.longValue()==0

i.doubleValue()==0
表示双精度

i.shortValue()==0


i.floatValue()==0
对于Float

有两种空安全的方法,如下所示:

Long val = null;
if( val == Long.valueOf( 0 ) ) {...}


@RafałLaskowski,这取决于类型,即
int
Integer
(后者可以为空)。@RafałLaskowski的意思是
Integer
而不是
int
@skw:给定问题的标题和变量的名称,很明显,它是
Integer
。让apache论坛记下这一点来升级!!:)据我所知不是这样。虽然可以很容易地定义静态实用程序方法来实现这一点,但我不会这么做,因为这会给值0一个特殊的含义,这是值得怀疑的(即使它存在于C/C++中)。似乎您正在使用myInteger作为可选值。如果是这种情况,并且您使用的是Java8,那么您可以使用可选的并编写
If(myOptInteger.orElse(0)!=0)
Yep,同意这比“丑陋的普通”解决方案要长。但这就是为什么我添加了可选选项,这可能有助于根本避免这些检查…这仍然无法检查myInteger是否为null&这将导致NullPointerException失败。由于目标对象是整数,我们必须同时检查NOTNULL和NOTZERO。尽管此解决方案实际上并不比OP中的解决方案更“简洁”,使用
Optional
确实打开了我不知道存在的门-尤其是当对象不仅仅是一个基本包装器时。如果没有intValue():)
if(Optional.ofNullable(myInteger)。orElse(0)!=0),这种情况可能会少一点{..
@VladimirGilevich谢谢你的提示!我不太喜欢自动装箱,因为你永远不知道编译器从中得到了什么,但是是的,在这种情况下,它甚至增加了可读性。I==null | | I==0这不容易吗:P
Long val = null;
if( val == Long.valueOf( 0 ) ) {...}
if( Objects.equals( val, 0L ) ) {...}