常用工具类-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
相关文章
|
8月前
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
68 0
|
4月前
|
Java 索引
常用工具类-Arrays
本文介绍了Java工具类Arrays和Arrays.ArrayList的常用功能,包括数组的打印、创建、比较、排序、检索以及转换为List的方法,以及setAll和parallelSetAll的使用,展示了如何通过这些工具类便捷地操作数组。
常用工具类-Arrays
|
4月前
|
Java
常用工具类-Collections
本文介绍了Java中Collections工具类的功能和用法,包括对集合进行排序、查找、填充操作,判断集合是否有交集,以及创建不可变集合的方法。通过示例代码展示了如何使用Collections类提供的静态方法,如reverse、shuffle、sort、swap、binarySearch、max、min、fill、frequency、disjoint、emptyList等,突出了Collections类在操作集合时的便利性和实用性。
常用工具类-Collections
|
6月前
|
XML JSON Java
常用工具类---JSONUtil
这段内容提供了Java中将不同数据结构转换为JSON的代码示例。包括使用`JSONArray`将一维和二维数组、对象、Map及List转换为JSON字符串,并展示了如何从JSON字符串转换回Object、List以及XML到JSON的转换。
|
5月前
|
Java API
【Java】Object、Objects、包装类、StringBuilder、StringJoiner
【Java】Object、Objects、包装类、StringBuilder、StringJoiner
|
6月前
|
存储 Java
常用工具类---StringUtil
这篇文档讨论了Java中处理超长字符串的问题。由于字符串字面量限制为65534个字符,超过此长度会导致编译错误。当从HTTP或RPC接收长字符串时,不能直接用字符串字面量接收。解决方案是使用StringBuilder动态构建字符串,通过分组处理超过限制的字符序列。示例代码展示了如何分割并重新组合超过长度限制的字符串。
|
6月前
|
Java
常用工具类---IOUtils
该文档是关于Java中文件操作的说明,强调所有IO操作必须在`finally`块中关闭。提供了三个示例:1) 读取指定文件`test.txt`的全部内容,使用`FileReader`和`StringBuffer`;2) 追加内容到`test.txt`文件,通过`FileOutputStream`, `OutputStreamWriter`和`BufferedWriter`实现;3) 递归遍历目录下的所有文件,使用`File`类和递归函数获取每个文件的绝对路径。
|
8月前
|
XML Java 数据库连接
mybatis报错:java.lang.IllegalArgumentException: Mapped Statements collection does not contain
mybatis报错:java.lang.IllegalArgumentException: Mapped Statements collection does not contain
|
缓存 前端开发 Java
【Netty官方文档翻译】引用计数对象(reference counted objects)
【Netty官方文档翻译】引用计数对象(reference counted objects)
95 0
|
Java
【Java异常】java.lang.IllegalStateException: Ambiguous mapping. Cannot map ‘xxx‘ method
【Java异常】java.lang.IllegalStateException: Ambiguous mapping. Cannot map ‘xxx‘ method
176 0