杰瑞科技汇

Java Integer判空,null和0如何区分?

在 Java 中,Integer 是一个包装类,用于表示 int 类型的值,由于 Integer 是对象,因此可以判空;而 int 是基本数据类型,不能判空(直接使用 == null 会编译错误)。

Java Integer判空,null和0如何区分?-图1
(图片来源网络,侵删)

Integer 判空的方法

(1) 直接判空(适用于可能为 null 的情况)

Integer num = null;
if (num == null) {
    System.out.println("num is null");
}

(2) 使用 Objects.isNull()Objects.nonNull()(Java 7+)

import java.util.Objects;
Integer num = null;
if (Objects.isNull(num)) {
    System.out.println("num is null");
}
if (Objects.nonNull(num)) {
    System.out.println("num is not null");
}

(3) 使用 Optional(Java 8+,推荐用于避免 NullPointerException

import java.util.Optional;
Integer num = null;
Optional<Integer> optionalNum = Optional.ofNullable(num);
if (optionalNum.isPresent()) {
    System.out.println("num is not null: " + optionalNum.get());
} else {
    System.out.println("num is null");
}

int 基本类型不能判空

如果直接使用 int,编译器会报错:

int num = null; // 编译错误:incompatible types: <null> cannot be converted to int

常见场景:从数据库或 JSON 获取 Integer 时判空

从数据库查询可能返回 null,此时需要判空:

Integer id = queryFromDatabase(); // 可能返回 null
if (id != null) {
    System.out.println("ID: " + id);
} else {
    System.out.println("ID is null");
}

注意事项

  • Integer 的缓存范围Integer 会缓存 -128127 的值,Integer.valueOf(127) == Integer.valueOf(127) 返回 true,但超出范围则不一定相等。
  • 自动拆箱(Unboxing)时的 NullPointerException
    Integer num = null;
    int primitiveNum = num; // 抛出 NullPointerException

类型 判空方式 示例
Integer == null / Objects.isNull() if (num == null)
Integer Optional.ofNullable() Optional.ofNullable(num)
int 不能判空(直接使用即可) int num = 0;

根据场景选择合适的方式,避免 NullPointerException

Java Integer判空,null和0如何区分?-图2
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇