在Java开发中,java.util.Objects类提供了一组静态方法,用来简化对象操作并减少空指针异常的风险。它主要涵盖判空处理、哈希计算以及相等性比较等常见需求。下面通过具体方法和代码示例来说明其用法。

一、判空相关方法
Objects类提供了多个与null判断有关的静态方法,可以避免直接写obj == null这样的重复代码。
1. requireNonNull方法
该方法用来强制对象不能为空,如果传入null会抛出NullPointerException,常用于方法参数校验。
import java.util.Objects;
public class Demo {
public static void printName(String name) {
// 如果name为null,这里会抛出NullPointerException
Objects.requireNonNull(name, "name不能为空");
System.out.println(name.length());
}
public static void main(String[] args) {
printName("张三");
// printName(null); // 会报错
}
}
2. isNull与nonNull方法
这两个方法返回boolean值,适合在过滤或条件判断中使用。
import java.util.Objects;
import java.util.List;
import java.util.ArrayList;
public class CheckDemo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add(null);
list.add("b");
// 过滤掉null元素
list.removeIf(Objects::isNull);
System.out.println(list); // [a, b]
System.out.println(Objects.nonNull("x")); // true
}
}
二、哈希计算方法
Objects.hash()可以基于多个字段快速生成哈希值,常用于重写hashCode方法。
import java.util.Objects;
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
// 根据name和age计算哈希
return Objects.hash(name, age);
}
}
三、相等性比较方法
Objects.equals()能安全地比较两个对象,即使其中一方为null也不会抛出异常。
import java.util.Objects;
public class EqualDemo {
public static void main(String[] args) {
String a = null;
String b = "hello";
// 传统写法可能空指针
// System.out.println(a.equals(b));
// 使用Objects.equals安全比较
System.out.println(Objects.equals(a, b)); // false
System.out.println(Objects.equals(b, "hello")); // true
}
}
四、方法对比总结
| 方法名 | 作用 | 为空时行为 |
|---|---|---|
| requireNonNull | 参数非空校验 | 抛异常 |
| isNull / nonNull | 判断对象是否为空 | 返回true/false |
| hash | 计算多字段哈希 | 字段为空参与计算 |
| equals | 安全比较相等性 | 不抛异常 |
合理使用Objects类的这些方法,可以让Java代码更简洁,也更不容易出现空指针错误。