你对Objects工具类了解有多少?看完这篇文章又涨知识了

398 阅读5分钟

Objects:专为操作Java对象而生的工具类, Java 的 Objects 类是一个实用工具类,包含了一系列静态方法,用于处理对象。它位于 java.util 包中,自 Java 7 引入。Objects 类的主要目的是降低代码中的空指针异常open in new window (NullPointerException) 风险,同时提供一些非常实用的方法供我们使用。

Java中提供了许多工具类来方便我们开发,其中一个就是Objects类。Objects 类是 JDK 7 中新增的一个工具类,它提供了一些静态方法,用于操作对象。在这篇文章中,我们将深入讲解Objects类及其所有使用方法,并附上代码示例,使读者能更好地掌握该工具类的使用。

一、关于Objects类

Objects类是Java 7中新增的一个工具类,主要是提供了一些静态方法以方便对对象的处理。在JDK8及之后的版本中,该类被定义在java.util包中,可以通过以下代码导入:

import java.util.Objects;

二、equals方法

equals方法是Java中判断两个对象是否相等的方法,但是在我们进行判断之前,我们需要考虑到空值的情况。使用Objects类可以很好地处理空值,下面是一个使用Objects#equals方法来判断两个对象是否相等的例子:

public class ObjectExample {
    public static void main(String[] args) {
        String str1 = "hello";
        String str2 = "world";
        String str3 = null;

        System.out.println(Objects.equals(str1, str2)); //false
        System.out.println(Objects.equals(str1, "hello")); //true
        System.out.println(Objects.equals(str1, str3)); //false
        System.out.println(Objects.equals(null, str3)); //true
    }
}

在上面的代码中,我们可以看到Objects#equals方法会先检查参数是否均为null,如果是,则返回true。如果其中一个参数为null,另一个不是,则返回false。如果两个参数均不为null,则返回的结果是根据调用第一个参数对象的equals方法得到的,如果第一个对象没有实现equals方法,则返回第二个对象的equals方法的反值。

三、hashCode方法

Hash码是一个为对象生成的整数值,它通常被用于加速对象在散列表中的查找操作。Java中的hashCode方法是Object类的一个方法,用于返回当前对象的hash码。但是,我们有时需要自己重写hashCode方法以实现更好的效率或更恰当的处理方法,Objects#hash方法能帮助我们更快地编写自己的hashCode方法,下面是一个使用Objects#hash方法来生成hashCode的例子:

public class ObjectExample {
    public static void main(String[] args) {
        String str = "hello world";
        int hash = Objects.hash(str, 123, true);
        System.out.println("hash: " + hash); //1357256172
    }
}

在上面的代码中,我们可以看到,Objects#hash方法可以接受任意数量的参数,并返回它们的hash码的组合值。这些参数可以是任意类型,包括null。由于所有的非基本类型都实现了Object类,因此可以传递任意类型的对象作为参数。

四、requireNonNull方法

requireNonNull方法是Objects类提供的一个检查空值的方法。它接受两个参数:一个是要检查的对象,另一个是错误信息。如果传递的对象为null,则抛出NullPointerException异常,并将传递的错误信息作为异常信息提示。

public class ObjectExample {
    public static void main(String[] args) {
        String str = null;
        Objects.requireNonNull(str, "字符串不能为空");
    }
}

在上面的代码中,我们可以看到如果我们将字符串str设为null,那么调用Objects#requireNonNull方法就会抛出NullPointerException异常,并将传递的错误信息作为异常信息提示。

五、isNull方法和nonNull方法

如果我们想判断一个对象是否为null或非null,可以使用Objects类提供的isNull方法和nonNull方法。

public class ObjectExample {
    public static void main(String[] args) {
        String str = null;

        if (Objects.isNull(str)) {
            System.out.println("str is null");
        } else {
            System.out.println("str is not null");
        }

        str = "hello";

        if (Objects.nonNull(str)) {
            System.out.println("str is not null");
        } else {
            System.out.println("str is null");
        }
    }
}

六、toString方法

Java中的toString方法是用于获取对象的字符串表示形式的方法。但是,如果对象为null,那么调用它的toString方法将抛出NullPointerException异常。要避免这种情况,我们可以使用Objects类提供的toString方法。

public class ObjectExample {
    public static void main(String[] args) {
        String str = "hello";

        System.out.println(Objects.toString(str)); //hello

        str = null;

        System.out.println(Objects.toString(str)); //null
    }
}

在上面的代码中,我们可以看到,如果我们使用Objects#toString方法来获取对象的字符串表示形式,那么当对象为null时,我们将得到一个null字符串,而不是抛出NullPointerException异常。

七、例外信息

在调试代码时,如果我们需要打印出异常信息,通常使用的方法是将异常对象作为参数传递给printStackTrace方法。但有时候我们会遇到一种情况,就是可能存在异常对象为null的情况。这时候,我们可以使用Objects类提供的例外信息方法。

public class ObjectExample {
    public static void main(String[] args) {
        try {
            // some codes here
        } catch (Exception e) {
            System.err.println(Objects.toString(e.getMessage(), "no message"));
            System.err.println(Objects.toString(e.getCause(), "no cause"));
        }
    }
}

在上面的代码中,我们可以看到,如果e.getMessage()或e.getCause()的返回值为null,我们将得到一个"no message"或"no cause"字符串,而不是抛出NullPointerException异常。

八、实例化对象

除了以上方法,Objects类还提供了一些用于实例化对象的方法。例如,我们可以使用Objects.requireNonNullElse方法来获取一个默认值,如果传入的参数为null,则返回默认值。

public class ObjectExample {
    public static void main(String[] args) {
        String str = null;
        String defaultValue = "default value";

        System.out.println(Objects.requireNonNullElse(str, defaultValue)); //default value
    }
}

在上面的代码中,我们可以看到如果我们将字符串str设为null,那么调用Objects#requireNonNullElse方法就会返回传递的默认值。

九、总结

本文主要介绍了Java中的Objects类,该类提供了一些静态方法,用于操作对象。我们介绍了以下方法:

  1. equals方法:用于判断两个对象是否相等。

  2. hashCode方法:用于生成对象的hash码。

  3. requireNonNull方法:用于检查空值。

  4. isNull方法和nonNull方法:用于判断一个对象是否为null或非null。

  5. toString方法:用于获取对象的字符串表示形式。

  6. 例外信息:用于打印异常信息。

  7. 实例化对象:用于获取默认值。

通过本文的介绍,相信读者已经掌握了Objects类的使用方法。在实际开发中,我们可以根据具体情况选择合适的方法来操作对象,提高程序的效率和可读性。