Module java.base
Package java.util

Class Objects

java.lang.Object
java.util.Objects

public final class Objects extends Object
这个类包含用于操作对象或在操作之前检查某些条件的static实用方法。这些实用程序包括用于计算对象的哈希码、为对象返回字符串、比较两个对象以及检查索引或子范围值是否超出范围的null安全或null容忍方法。
自版本:
1.7
  • Method Summary

    Modifier and Type
    Method
    Description
    static int
    checkFromIndexSize(int fromIndex, int size, int length)
    检查从fromIndex(包括)到fromIndex + size(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。
    static long
    checkFromIndexSize(long fromIndex, long size, long length)
    检查从fromIndex(包括)到fromIndex + size(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。
    static int
    checkFromToIndex(int fromIndex, int toIndex, int length)
    检查从fromIndex(包括)到toIndex(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。
    static long
    checkFromToIndex(long fromIndex, long toIndex, long length)
    检查从fromIndex(包括)到toIndex(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。
    static int
    checkIndex(int index, int length)
    检查index是否在从0(包括)到length(不包括)的范围内。
    static long
    checkIndex(long index, long length)
    检查index是否在从0(包括)到length(不包括)的范围内。
    static <T> int
    compare(T a, T b, Comparator<? super T> c)
    如果参数相同则返回0,否则返回 c.compare(a, b)
    static boolean
    如果参数深度相等则返回true,否则返回false
    static boolean
    equals(Object a, Object b)
    如果参数相等则返回true,否则返回false
    static int
    hash(Object... values)
    为输入值序列生成哈希码。
    static int
    返回非null参数的哈希码,对于null参数返回0。
    static boolean
    isNull(Object obj)
    如果提供的引用为null则返回true,否则返回false
    static boolean
    nonNull(Object obj)
    如果提供的引用为非null则返回true,否则返回false
    static <T> T
    requireNonNull(T obj)
    检查指定的对象引用不为null
    static <T> T
    requireNonNull(T obj, String message)
    检查指定的对象引用不为null,如果为null则抛出自定义的NullPointerException
    static <T> T
    requireNonNull(T obj, Supplier<String> messageSupplier)
    检查指定的对象引用不为null,如果为null则抛出自定义的NullPointerException
    static <T> T
    requireNonNullElse(T obj, T defaultObj)
    如果第一个参数非null则返回第一个参数,否则返回第二个参数。
    static <T> T
    requireNonNullElseGet(T obj, Supplier<? extends T> supplier)
    如果第一个参数非null则返回第一个参数,否则返回supplier.get()的非null值。
    static String
    如果未重写toString方法和hashCode方法,则返回等效于Object.toString返回的字符串。
    static String
    如果第一个参数非null则返回调用toString的结果,如果为null则返回"null"
    static String
    toString(Object o, String nullDefault)
    如果第一个参数非null则返回第一个参数调用toString的结果,否则返回第二个参数。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • equals

      public static boolean equals(Object a, Object b)
      如果参数相等则返回true,否则返回false。因此,如果两个参数都为null,则返回true。否则,如果第一个参数不为null,则通过调用此方法的第二个参数的equals方法来确定相等性。否则,返回false
      参数:
      a - 一个对象
      b - 与a比较是否相等的对象
      返回:
      如果参数相等则返回true,否则返回false
      参见:
    • deepEquals

      public static boolean deepEquals(Object a, Object b)
      如果参数深度相等则返回true,否则返回false。两个null值深度相等。如果两个参数都是数组,则使用Arrays.deepEquals中的算法来确定相等性。否则,通过使用第一个参数的equals方法来确定相等性。
      参数:
      a - 一个对象
      b - 与a比较是否深度相等的对象
      返回:
      如果参数深度相等则返回true,否则返回false
      参见:
    • hashCode

      public static int hashCode(Object o)
      返回非null参数的哈希码,对于null参数返回0。
      参数:
      o - 一个对象
      返回:
      返回非null参数的哈希码,对于null参数返回0
      参见:
    • hash

      public static int hash(Object... values)
      为一系列输入值生成哈希码。生成的哈希码就好像所有输入值都被放入一个数组中,然后通过调用Arrays.hashCode(Object[])对该数组进行哈希处理。

      此方法对于实现包含多个字段的对象的Object.hashCode()非常有用。例如,如果一个对象有三个字段xyz,可以这样写:

       @Override public int hashCode() {
           return Objects.hash(x, y, z);
       }
       
      警告:当提供单个对象引用时,返回的值不等于该对象引用的哈希码。可以通过调用hashCode(Object)来计算该值。
      参数:
      values - 要进行哈希处理的值
      返回:
      输入值序列的哈希值
      参见:
    • toString

      public static String toString(Object o)
      如果参数非null则返回调用toString的结果,如果为null则返回"null"
      参数:
      o - 一个对象
      返回:
      如果参数非null则返回调用toString的结果,如果为null则返回"null"
      参见:
    • toString

      public static String toString(Object o, String nullDefault)
      如果第一个参数非null则返回第一个参数调用toString的结果,否则返回第二个参数。
      参数:
      o - 一个对象
      nullDefault - 如果第一个参数为null则返回的字符串
      返回:
      如果第一个参数非null则返回第一个参数调用toString的结果,否则返回第二个参数。
      参见:
    • toIdentityString

      public static String toIdentityString(Object o)
      如果未重写toString方法和hashCode方法,则返回等效于Object.toString返回的字符串。
      实现要求:
      该方法返回等效于:
      o.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(o))
      实现说明:
      此方法为对象构造一个字符串,而不调用对象的任何可重写方法。
      参数:
      o - 一个对象
      返回:
      如果未重写toString方法和hashCode方法,则返回等效于Object.toString返回的字符串
      抛出:
      NullPointerException - 如果参数为null
      自版本:
      19
      参见:
    • compare

      public static <T> int compare(T a, T b, Comparator<? super T> c)
      如果参数相同则返回0,否则返回 c.compare(a, b)。因此,如果两个参数都为null则返回0。

      请注意,如果其中一个参数为null,则根据Comparatornull值选择的排序策略,可能会抛出或不会抛出NullPointerException

      类型参数:
      T - 要比较的对象的类型
      参数:
      a - 一个对象
      b - 与a进行比较的对象
      c - 用于比较前两个参数的Comparator
      返回值:
      如果参数相同则返回0,否则返回 c.compare(a, b)
      参见:
    • requireNonNull

      public static <T> T requireNonNull(T obj)
      检查指定的对象引用不为null。该方法主要用于在方法和构造函数中进行参数验证,如下所示:
       public Foo(Bar bar) {
           this.bar = Objects.requireNonNull(bar);
       }
       
      类型参数:
      T - 引用的类型
      参数:
      obj - 要检查是否为null的对象引用
      返回值:
      如果不为null则返回obj
      抛出:
      NullPointerException - 如果objnull
    • requireNonNull

      public static <T> T requireNonNull(T obj, String message)
      检查指定的对象引用不为null,如果为 则抛出自定义的 NullPointerException。该方法主要用于在具有多个参数的方法和构造函数中进行参数验证,如下所示:
       public Foo(Bar bar, Baz baz) {
           this.bar = Objects.requireNonNull(bar, "bar must not be null");
           this.baz = Objects.requireNonNull(baz, "baz must not be null");
       }
       
      类型参数:
      T - 引用的类型
      参数:
      obj - 要检查是否为 的对象引用
      message - 在抛出 NullPointerException时使用的详细消息
      返回值:
      如果不为 则返回 obj
      抛出:
      NullPointerException - 如果obj
    • isNull

      public static boolean isNull(Object obj)
      如果提供的引用为 则返回 true,否则返回
      API注释:
      此方法存在用作Predicatefilter(Objects::isNull)
      参数:
      obj - 要检查是否为 的引用
      返回值:
      如果提供的引用为 则返回 true,否则返回
      自Java版本:
      1.8
      参见:
    • nonNull

      public static boolean nonNull(Object obj)
      如果提供的引用为非 则返回 true,否则返回
      API注释:
      此方法存在用作Predicatefilter(Objects::nonNull)
      参数:
      obj - 要检查是否为 的引用
      返回值:
      如果提供的引用为非 则返回 true,否则返回
      自Java版本:
      1.8
      参见:
    • requireNonNullElse

      public static <T> T requireNonNullElse(T obj, T defaultObj)
      如果第一个参数为非 则返回第一个参数,否则返回第二个参数中非 的值。
      类型参数:
      T - 引用的类型
      参数:
      obj - 一个对象
      defaultObj - 如果第一个参数为 则返回的非 对象
      返回值:
      如果第一个参数为非 则返回第一个参数,否则如果第二个参数为非 则返回第二个参数
      抛出:
      NullPointerException - 如果objdefaultObj都为
      自Java版本:
      9
    • requireNonNullElseGet

      public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier)
      如果第一个参数为非 则返回第一个参数,否则返回 supplier.get()的非 值。
      类型参数:
      T - 第一个参数和返回类型的类型
      参数:
      obj - 一个对象
      supplier - 一个供应非 对象的供应者,如果第一个参数为 则返回
      返回值:
      如果第一个参数为非 则返回第一个参数,否则如果 supplier.get()为非 则返回 supplier.get()
      抛出:
      NullPointerException - 如果objsuppliersupplier.get()的值为
      自Java版本:
      9
    • requireNonNull

      public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)
      检查指定的对象引用不为 ,如果为 则抛出自定义的 NullPointerException

      与方法requireNonNull(Object, String)不同,此方法允许在进行空检查后延迟创建消息。在非 情况下,这可能会带来性能优势,但在决定调用此方法时,应注意创建消息供应者的成本是否低于直接创建字符串消息的成本。

      类型参数:
      T - 引用的类型
      参数:
      obj - 要检查是否为 的对象引用
      messageSupplier - 供应在抛出NullPointerException时使用的详细消息
      返回值:
      如果不为 则返回 obj
      抛出:
      NullPointerException - 如果obj
      自Java版本:
      1.8
    • checkIndex

      public static int checkIndex(int index, int length)
      检查index是否在范围从0(包括)到length(不包括)的范围内。

      如果以下不等式之一为真,则index被定义为超出范围:

      • index < 0
      • index >= length
      • length < 0,这是从前面的不等式推导出的
      参数:
      index - 索引
      length - 范围的上限(不包括)
      返回值:
      如果在范围内则返回index
      抛出:
      IndexOutOfBoundsException - 如果index超出范围
      自Java版本:
      9
    • checkFromToIndex

      public static int checkFromToIndex(int fromIndex, int toIndex, int length)
      检查从fromIndex(包括)到toIndex(不包括)的子范围是否在范围从0(包括)到length(不包括)的范围内。

      如果以下不等式之一为真,则子范围被定义为超出范围:

      • fromIndex < 0
      • fromIndex > toIndex
      • toIndex > length
      • length < 0,这是从前面的不等式推导出的
      参数:
      fromIndex - 子范围的下限(包括)
      toIndex - 子范围的上限(不包括)
      length - 范围的上限(不包括)
      返回值:
      如果子范围在范围内则返回fromIndex
      抛出:
      IndexOutOfBoundsException - 如果子范围超出范围
      自Java版本:
      9
    • checkFromIndexSize

      public static int checkFromIndexSize(int fromIndex, int size, int length)
      检查从fromIndex(包括)到fromIndex + size(不包括)的子范围是否在范围从0(包括)到length(不包括)的范围内。

      如果以下不等式之一为真,则子范围被定义为超出范围:

      • fromIndex < 0
      • size < 0
      • fromIndex + size > length,考虑到整数溢出
      • length < 0,这是从前面的不等式推导出的
      参数:
      fromIndex - 子区间的下限(包括)
      size - 子范围的大小
      length - 范围的上限(不包括)
      返回值:
      如果子范围在范围内则返回fromIndex
      抛出:
      IndexOutOfBoundsException - 如果子范围超出范围
      自Java版本:
      9
    • checkIndex

      public static long checkIndex(long index, long length)
      检查index是否在范围从0(包括)到length(不包括)的范围内。

      如果以下不等式之一为真,则index被定义为超出范围:

      • index < 0
      • index >= length
      • length < 0,这是从前面的不等式推导出的
      参数:
      index - 索引
      length - 范围的上界(不包括)
      返回值:
      index 如果在范围内
      抛出:
      IndexOutOfBoundsException - 如果 index 超出范围
      自版本:
      16
    • checkFromToIndex

      public static long checkFromToIndex(long fromIndex, long toIndex, long length)
      检查从 fromIndex(包括)到 toIndex(不包括)的子范围是否在从 0(包括)到 length(不包括)的范围内。

      如果以下不等式之一为真,则子范围被定义为超出范围:

      • fromIndex < 0
      • fromIndex > toIndex
      • toIndex > length
      • length < 0,这是从前述不等式推导出的
      参数:
      fromIndex - 子范围的下界(包括)
      toIndex - 子范围的上界(不包括)
      length - 范围的上界(不包括)
      返回值:
      fromIndex 如果子范围在范围内
      抛出:
      IndexOutOfBoundsException - 如果子范围超出范围
      自版本:
      16
    • checkFromIndexSize

      public static long checkFromIndexSize(long fromIndex, long size, long length)
      检查从 fromIndex(包括)到 fromIndex + size(不包括)的子范围是否在从 0(包括)到 length(不包括)的范围内。

      如果以下不等式之一为真,则子范围被定义为超出范围:

      • fromIndex < 0
      • size < 0
      • fromIndex + size > length,考虑整数溢出
      • length < 0,这是从前述不等式推导出的
      参数:
      fromIndex - 子区间的下界(包括)
      size - 子范围的大小
      length - 范围的上界(不包括)
      返回值:
      fromIndex 如果子范围在范围内
      抛出:
      IndexOutOfBoundsException - 如果子范围超出范围
      自版本:
      16