常用工具类-Objects

简介: 本文介绍了Java标准库中的Objects工具类,它提供了一系列用于操作对象的实用方法,包括判断对象是否为空、比较两个对象是否相等、比较两个对象以及判断两个数组是否深度相等。文章通过示例代码展示了Objects类中isNull、nonNull、requireNull、equals、compare和deepEquals等方法的使用,突出了Objects类在处理对象时的便利性和实用性。

Objects工具类位于java.util包中,提供了对对象操作的一些实用方法

image.png

①判断对象是否为空

  1. isNull() 判断对象是否为空
  2. noNull() 判断对象是否不为空
  3. requireNull()检查对象是否为null,如果为null则抛出NullPointerException异常,否则返回该对象。
Integer num1 =  10;
Integer num2 =  null;

// isNull() 判断对象是否为空
System.out.println(Objects.isNull(num1)); // false
System.out.println(Objects.isNull(num2)); // ture

// nonNull  判断对象是否不为空
System.out.println(Objects.nonNull(num1));
System.out.println(Objects.nonNull(num2));

// requireNull()
// 当对象为空时,抛出空指针异常 NullPointerException;
// 不为空时,则返回当前对象的值
System.out.println(Objects.requireNonNull(num1));

②判断两个对象是否相等

Objects.equals() ,可以在判断两个对象时规避掉空指针,但是当数据类型不同值相同时,会有一点坑。
使用Object.euqals()判断类的两个对象时,需要自己重写类的equals()方法

// 使用Objects.equals() 可以规避掉空指针,但是当数据类型但值相同时,也会判定为不相等false
Integer integer1 = 1;
Integer integer2 = 1;
Long integer3 = 1L;
Integer integer4 = null;
System.out.println(Objects.equals(integer1, integer2)); // true
System.out.println(Objects.equals(integer1, integer3)); // false
System.out.println(Objects.equals(integer1, integer4)); // false

// 两个对象的equals比较,需要自己重写 实体类的equals()方法
People p1 = new People("zs","男",18);
People p2 = new People("lisi","男",18);
People p3 = new People("lisi","男",18);
System.out.println(Objects.equals(p1, p2)); //  false
System.out.println(Objects.equals(p2, p3)); //  true

People类:

import java.util.Objects;

public class People {
   
    private String name;
    private String sex;

    private int age;


    public People() {
   
    }

    public People(String name, String sex, int age) {
   
        this.name = name;
        this.sex = sex;
        this.age = age;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public String getSex() {
   
        return sex;
    }

    public void setSex(String sex) {
   
        this.sex = sex;
    }

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        this.age = age;
    }

    @Override
    public boolean equals(Object o) {
   
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        People people = (People) o;
        return age == people.age && Objects.equals(name, people.name) && Objects.equals(sex, people.sex);
    }

    @Override
    public int hashCode() {
   
        return Objects.hash(name, sex, age);
    }
}

③比较两个对象

Objects.compare()方法用于比较两个对象,并且可以传入一个Comparator比较器接口,以用于自定义比较器规则。

People p5 = new People("chenfan","男",22);
People p6 = new People("zhujiu","男",19);
People p7 = new People("zhujiu","男",19);
// 比较器对象
Comparator<People> nameComparator = Comparator.comparing(p->p.getAge());

// left>right 返回1 ,left<right 返回-1 ,left =right 返回0
System.out.println(Objects.compare(p5, p6, nameComparator));  // 1
System.out.println(Objects.compare(p6, p5, nameComparator));  // -1
System.out.println(Objects.compare(p6, p7, nameComparator));  // 0

④判断两个数组是否相等

Objects.deepEquals() 经常用于比较两个数组的内容是否相等

String[] strArr1 = new String[]{
   "a","b","c"};
String[] strArr2 = new String[]{
   "d","e","f"};
String[] strArr3 = new String[]{
   "d","e","f"};
System.out.println(Objects.deepEquals(strArr1, strArr2)); // false
System.out.println(Objects.deepEquals(strArr2, strArr3)); // true
相关文章
|
5月前
Error:java.util.zip.ZipException: duplicate entry: com/google/firebase/iid/zzc.class ,EvalIssueExcep
Error:java.util.zip.ZipException: duplicate entry: com/google/firebase/iid/zzc.class ,EvalIssueExcep
53 0
|
8天前
|
Java
Optional源码分析(涉及Objects源码和Stream源码)
本文分析了Java中Optional类的源码,包括其内部的Objects.requireNonNull方法、EMPTY定义、构造方法、ofNullable方法、isEmpty方法以及如何与Stream类交互,展示了Optional类如何避免空指针异常并提供流式操作。
22 0
Optional源码分析(涉及Objects源码和Stream源码)
|
2月前
|
Android开发
解決Android报错:Could not initialize class org.codehaus.groovy.reflection.ReflectionCache
解決Android报错:Could not initialize class org.codehaus.groovy.reflection.ReflectionCache
80 1
|
3月前
|
Java
常用工具类---IOUtils
该文档是关于Java中文件操作的说明,强调所有IO操作必须在`finally`块中关闭。提供了三个示例:1) 读取指定文件`test.txt`的全部内容,使用`FileReader`和`StringBuffer`;2) 追加内容到`test.txt`文件,通过`FileOutputStream`, `OutputStreamWriter`和`BufferedWriter`实现;3) 递归遍历目录下的所有文件,使用`File`类和递归函数获取每个文件的绝对路径。
|
3月前
|
存储 Java
常用工具类---StringUtil
这篇文档讨论了Java中处理超长字符串的问题。由于字符串字面量限制为65534个字符,超过此长度会导致编译错误。当从HTTP或RPC接收长字符串时,不能直接用字符串字面量接收。解决方案是使用StringBuilder动态构建字符串,通过分组处理超过限制的字符序列。示例代码展示了如何分割并重新组合超过长度限制的字符串。
|
5月前
|
SQL JSON Java
Java【问题记录 02】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
Java【问题记录 02】对象封装+固定排序+list All elements are null引起的异常处理+Missing artifact com.sun:tools:jar:1.8.0
68 0
|
11月前
|
缓存 前端开发 Java
【Netty官方文档翻译】引用计数对象(reference counted objects)
【Netty官方文档翻译】引用计数对象(reference counted objects)
76 0
|
存储 Java
《JavaSE-第十九章》之Collection
《JavaSE-第十九章》之Collection
222 1
《JavaSE-第十九章》之Collection
|
存储 NoSQL Java
Java常用API(一)Object与Objects
Java常用API(一)Object与Objects
58 0
|
存储 安全 Java
Java Review - 集合框架=Collection+Map
Java Review - 集合框架=Collection+Map
70 0