java.lang.Object
java.util.Objects
这个类包含用于操作对象或在操作之前检查某些条件的
static
实用方法。这些实用程序包括用于计算对象的哈希码、为对象返回字符串、比较两个对象以及检查索引或子范围值是否超出范围的null
安全或null
容忍方法。
- 自版本:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionstatic 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
deepEquals
(Object a, Object b) 如果参数深度相等则返回true
,否则返回false
。static boolean
如果参数相等则返回true
,否则返回false
。static int
为输入值序列生成哈希码。static int
返回非null
参数的哈希码,对于null
参数返回0。static boolean
如果提供的引用为null
则返回true
,否则返回false
。static boolean
如果提供的引用为非null
则返回true
,否则返回false
。static <T> T
requireNonNull
(T obj) 检查指定的对象引用不为null
。static <T> T
requireNonNull
(T obj, String message) static <T> T
requireNonNull
(T obj, Supplier<String> messageSupplier) 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
如果第一个参数非null
则返回第一个参数调用toString
的结果,否则返回第二个参数。
-
Method Details
-
equals
如果参数相等则返回true
,否则返回false
。因此,如果两个参数都为null
,则返回true
。否则,如果第一个参数不为null
,则通过调用此方法的第二个参数的equals
方法来确定相等性。否则,返回false
。- 参数:
-
a
- 一个对象 -
b
- 与a
比较是否相等的对象 - 返回:
-
如果参数相等则返回
true
,否则返回false
- 参见:
-
deepEquals
如果参数深度相等则返回true
,否则返回false
。两个null
值深度相等。如果两个参数都是数组,则使用Arrays.deepEquals
中的算法来确定相等性。否则,通过使用第一个参数的equals
方法来确定相等性。- 参数:
-
a
- 一个对象 -
b
- 与a
比较是否深度相等的对象 - 返回:
-
如果参数深度相等则返回
true
,否则返回false
- 参见:
-
hashCode
返回非null
参数的哈希码,对于null
参数返回0。- 参数:
-
o
- 一个对象 - 返回:
-
返回非
null
参数的哈希码,对于null
参数返回0 - 参见:
-
hash
为一系列输入值生成哈希码。生成的哈希码就好像所有输入值都被放入一个数组中,然后通过调用Arrays.hashCode(Object[])
对该数组进行哈希处理。此方法对于实现包含多个字段的对象的
Object.hashCode()
非常有用。例如,如果一个对象有三个字段x
、y
和z
,可以这样写:@Override public int hashCode() { return Objects.hash(x, y, z); }
hashCode(Object)
来计算该值。- 参数:
-
values
- 要进行哈希处理的值 - 返回:
- 输入值序列的哈希值
- 参见:
-
toString
如果参数非null
则返回调用toString
的结果,如果为null
则返回"null"
。- 参数:
-
o
- 一个对象 - 返回:
-
如果参数非
null
则返回调用toString
的结果,如果为null
则返回"null"
- 参见:
-
toString
如果第一个参数非null
则返回第一个参数调用toString
的结果,否则返回第二个参数。- 参数:
-
o
- 一个对象 -
nullDefault
- 如果第一个参数为null
则返回的字符串 - 返回:
-
如果第一个参数非
null
则返回第一个参数调用toString
的结果,否则返回第二个参数。 - 参见:
-
toIdentityString
如果未重写toString
方法和hashCode
方法,则返回等效于Object.toString
返回的字符串。- 实现要求:
-
该方法返回等效于:
o.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(o))
- 实现说明:
- 此方法为对象构造一个字符串,而不调用对象的任何可重写方法。
- 参数:
-
o
- 一个对象 - 返回:
-
如果未重写
toString
方法和hashCode
方法,则返回等效于Object.toString
返回的字符串 - 抛出:
-
NullPointerException
- 如果参数为null - 自版本:
- 19
- 参见:
-
compare
如果参数相同则返回0,否则返回c.compare(a, b)
。因此,如果两个参数都为null
则返回0。请注意,如果其中一个参数为
null
,则根据Comparator
为null
值选择的排序策略,可能会抛出或不会抛出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
- 如果obj
为null
-
requireNonNull
检查指定的对象引用不为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
如果提供的引用为则返回 true
,否则返回。 - API注释:
-
此方法存在用作
Predicate
,filter(Objects::isNull)
- 参数:
-
obj
- 要检查是否为的引用 - 返回值:
-
如果提供的引用为
则返回 true
,否则返回 - 自Java版本:
- 1.8
- 参见:
-
nonNull
如果提供的引用为非则返回 true
,否则返回。 - API注释:
-
此方法存在用作
Predicate
,filter(Objects::nonNull)
- 参数:
-
obj
- 要检查是否为的引用 - 返回值:
-
如果提供的引用为非
则返回 true
,否则返回 - 自Java版本:
- 1.8
- 参见:
-
requireNonNullElse
public static <T> T requireNonNullElse(T obj, T defaultObj) 如果第一个参数为非则返回第一个参数,否则返回第二个参数中非 的值。 - 类型参数:
-
T
- 引用的类型 - 参数:
-
obj
- 一个对象 -
defaultObj
- 如果第一个参数为则返回的非 对象 - 返回值:
-
如果第一个参数为非
则返回第一个参数,否则如果第二个参数为非 则返回第二个参数 - 抛出:
-
NullPointerException
- 如果obj
和defaultObj
都为 - 自Java版本:
- 9
-
requireNonNullElseGet
如果第一个参数为非则返回第一个参数,否则返回 supplier.get()
的非值。 - 类型参数:
-
T
- 第一个参数和返回类型的类型 - 参数:
-
obj
- 一个对象 -
supplier
- 一个供应非对象的供应者,如果第一个参数为 则返回 - 返回值:
-
如果第一个参数为非
则返回第一个参数,否则如果 supplier.get()
为非则返回 supplier.get()
- 抛出:
-
NullPointerException
- 如果obj
为且 supplier
为或 supplier.get()
的值为 - 自Java版本:
- 9
-
requireNonNull
检查指定的对象引用不为,如果为 则抛出自定义的 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
-