Java中的Objects工具类位于java.util包下,是Java 7引入的静态工具类,提供了大量针对对象操作的通用方法,避免了开发者手动处理对象时的空指针问题,同时简化了对象比较、哈希计算等常见逻辑的实现。

Objects工具类核心方法解析
1. 对象判空相关方法
Objects工具类提供了两个常用的判空方法,分别是isNull和nonNull,用于判断对象是否为null,替代手动的obj == null判断,代码可读性更高。
方法定义如下:
// 判断对象是否为null,为null返回true,否则返回false public static boolean isNull(Object obj) // 判断对象是否不为null,不为null返回true,否则返回false public static boolean nonNull(Object obj)
使用示例:
import java.util.Objects;
public class ObjectsDemo {
public static void main(String[] args) {
String str1 = null;
String str2 = "test";
// 判空示例
System.out.println(Objects.isNull(str1)); // 输出true
System.out.println(Objects.isNull(str2)); // 输出false
System.out.println(Objects.nonNull(str1)); // 输出false
System.out.println(Objects.nonNull(str2)); // 输出true
}
}
2. 对象相等性比较方法
手动比较两个对象是否相等时,需要先判断对象是否为null,否则会抛出空指针异常。Objects工具类的equals方法已经内置了null判断逻辑,使用起来更安全。
方法定义:
// 比较两个对象是否相等,两个参数都为null时返回true,一个为null另一个不为null时返回false public static boolean equals(Object a, Object b)
使用示例:
import java.util.Objects;
public class ObjectsDemo {
public static void main(String[] args) {
String a = null;
String b = "hello";
String c = "hello";
// 手动比较需要判空,否则a.equals(b)会抛空指针
// System.out.println(a.equals(b)); // 会抛出异常
// 使用Objects.equals比较,无需额外判空
System.out.println(Objects.equals(a, b)); // 输出false
System.out.println(Objects.equals(b, c)); // 输出true
System.out.println(Objects.equals(a, null)); // 输出true
}
}
如果需要深度比较两个对象,比如数组内容是否相等,可以使用deepEquals方法,该方法会递归比较数组中的元素:
import java.util.Objects;
public class ObjectsDemo {
public static void main(String[] args) {
int[] arr1 = {1, 2, 3};
int[] arr2 = {1, 2, 3};
int[] arr3 = {1, 2, 4};
System.out.println(Objects.deepEquals(arr1, arr2)); // 输出true
System.out.println(Objects.deepEquals(arr1, arr3)); // 输出false
System.out.println(Objects.deepEquals(null, null)); // 输出true
}
}
3. 对象哈希值计算方法
重写对象的hashCode方法时,需要保证相同对象的哈希值一致,不同对象的哈希值尽量不同。Objects工具类的hash和hashCode方法可以简化哈希值的计算。
hashCode方法用于计算单个对象的哈希值,null对象的哈希值为0:
// 返回对象的哈希值,对象为null时返回0 public static int hashCode(Object o)
hash方法可以传入多个对象,计算这些对象的组合哈希值,适合在重写hashCode方法时组合多个字段的哈希值:
// 计算多个对象的组合哈希值 public static int hash(Object... values)
使用示例:
import java.util.Objects;
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的哈希值,无需手动处理null情况
return Objects.hash(name, age);
}
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
User user = (User) obj;
// 使用Objects.equals比较字段,自动处理null
return age == user.age && Objects.equals(name, user.name);
}
}
public class ObjectsDemo {
public static void main(String[] args) {
User user1 = new User("张三", 20);
User user2 = new User("张三", 20);
User user3 = new User(null, 20);
System.out.println(user1.hashCode());
System.out.println(user2.hashCode());
System.out.println(Objects.equals(user1, user2)); // 输出true
System.out.println(Objects.equals(user1, user3)); // 输出false
}
}
4. 其他常用方法
Objects工具类还提供了requireNonNull系列方法,用于校验对象不为null,如果为null则抛出空指针异常,适合在方法参数校验场景使用:
// 校验对象不为null,为null时抛出NullPointerException public static <T> T requireNonNull(T obj) // 校验对象不为null,为null时抛出NullPointerException,携带自定义异常信息 public static <T> T requireNonNull(T obj, String message)
使用示例:
import java.util.Objects;
public class ObjectsDemo {
public static void printName(String name) {
// 校验name不为null,为null时抛出异常,提示信息为参数不能为空
Objects.requireNonNull(name, "参数不能为空");
System.out.println("姓名:" + name);
}
public static void main(String[] args) {
printName("李四"); // 正常执行
// printName(null); // 会抛出NullPointerException,提示信息为参数不能为空
}
}
使用注意事项
- Objects工具类的所有方法都是静态方法,直接通过类名调用即可,无需创建实例。
equals方法依赖对象的equals实现,如果对象没有重写equals方法,默认比较的是对象引用地址。requireNonNull方法适合在方法入口处做参数校验,提前暴露空指针问题,避免后续逻辑出现异常。- 对于自定义对象,重写
equals方法时建议同时重写hashCode方法,并且使用Objects工具类的方法实现,减少出错概率。
Objects工具类Java对象判空Java对象比较Java_null处理修改时间:2026-06-27 21:57:29