如何在Java中检查一个整数是空还是零?

ruyhziif  于 2022-12-25  发布在  Java
关注(0)|答案(9)|浏览(255)

还有更简洁的写法吗:

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

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

5cnsuln7

5cnsuln71#

使用Java 8:

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

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

xxe27gdn

xxe27gdn2#

由于问题中提到了StringUtils类,我假设项目中已经使用了Apache Commons lib。
然后,您可以使用以下命令:

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

或使用静态导入:

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

qvsjd97n3#

我会用一个三元条件来说明这个问题,比如:

public static boolean isNullorZero(Integer i){
    return 0 == ( i == null ? 0 : i);
}

这是不可读的,我同意;)

busg9geu

busg9geu4#

private boolean isNullOrZero(Integer i){
     return i == null || i.intValue() == 0;
}

对于某些其他类型:
i.longValue() == 0表示长
i.doubleValue() == 0用于双人间
简称i.shortValue() == 0
i.floatValue() == 0用于浮点

czq61nw1

czq61nw15#

也有一种零安全的方法来实现它,例如:

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

if( Objects.equals( val, 0L ) ) {...}
xuo3flqw

xuo3flqw6#

我创建了一个助手方法,也许可以帮助你,它使用反射,所以你必须考虑是否有必要使用它,你也需要java 8。
该方法适用于所有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);
        }
    }
}

你可以这样称呼:

Integer myNumber = NumberUtils.getNumberOrZero(someIntegerThatCanBeNull, Integer.class);

希望这能帮到你。

ddrv8njm

ddrv8njm7#

根据myInteger的实现(即myInteger中的Integer属性是box类型Integer还是unboxed原语int),您可能只需要编写一个条件。
Integer是实际的对象,这意味着它们可以是null,也就是说它们也可以将0作为值,因此,在这种情况下,您必须进行这两项检查。
int是基元,不能保存null的值。在这种情况下,您只需检查int属性是否不等于0。

bis0qfac

bis0qfac8#

如果你不想增加圈复杂度,并且在适当处理空值的同时仍然获得myInteger.equals(0)的功能,那么ObjectUtils.nullSafeEquals(0, myInteger)是个不错的选择。

57hvy0tb

57hvy0tb9#

private boolean isNotNullAndZero(Long num){
        return Optional.ofNullable(num).orElse(0L) != 0L ? true:false;
    }

相关问题