java.lang.Object
java.util.Objects
这个类包含用于操作对象或在操作之前检查某些条件的
static实用方法。这些实用程序包括用于计算对象的哈希码、为对象返回字符串、比较两个对象以及检查索引或子范围值是否超出范围的null安全或null容忍方法。
- 自版本:
- 1.7
-
Method Summary
Modifier and TypeMethodDescriptionstatic intcheckFromIndexSize(int fromIndex, int size, int length) 检查从fromIndex(包括)到fromIndex + size(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。static longcheckFromIndexSize(long fromIndex, long size, long length) 检查从fromIndex(包括)到fromIndex + size(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。static intcheckFromToIndex(int fromIndex, int toIndex, int length) 检查从fromIndex(包括)到toIndex(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。static longcheckFromToIndex(long fromIndex, long toIndex, long length) 检查从fromIndex(包括)到toIndex(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。static intcheckIndex(int index, int length) 检查index是否在从0(包括)到length(不包括)的范围内。static longcheckIndex(long index, long length) 检查index是否在从0(包括)到length(不包括)的范围内。static <T> intcompare(T a, T b, Comparator<? super T> c) 如果参数相同则返回0,否则返回c.compare(a, b)。static booleandeepEquals(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> TrequireNonNull(T obj) 检查指定的对象引用不为null。static <T> TrequireNonNull(T obj, String message) static <T> TrequireNonNull(T obj, Supplier<String> messageSupplier) static <T> TrequireNonNullElse(T obj, T defaultObj) 如果第一个参数非null则返回第一个参数,否则返回第二个参数。static <T> TrequireNonNullElseGet(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 < 0index >= lengthlength < 0,这是从前面的不等式推导出的
- 参数:
-
index- 索引 -
length- 范围的上限(不包括) - 返回值:
-
如果在范围内则返回
index - 抛出:
-
IndexOutOfBoundsException- 如果index超出范围 - 自Java版本:
- 9
-
checkFromToIndex
public static int checkFromToIndex(int fromIndex, int toIndex, int length) 检查从fromIndex(包括)到toIndex(不包括)的子范围是否在范围从0(包括)到length(不包括)的范围内。如果以下不等式之一为真,则子范围被定义为超出范围:
fromIndex < 0fromIndex > toIndextoIndex > lengthlength < 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 < 0size < 0fromIndex + 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 < 0index >= lengthlength < 0,这是从前面的不等式推导出的
- 参数:
-
index- 索引 -
length- 范围的上界(不包括) - 返回值:
-
index如果在范围内 - 抛出:
-
IndexOutOfBoundsException- 如果index超出范围 - 自版本:
- 16
-
checkFromToIndex
public static long checkFromToIndex(long fromIndex, long toIndex, long length) 检查从fromIndex(包括)到toIndex(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。如果以下不等式之一为真,则子范围被定义为超出范围:
fromIndex < 0fromIndex > toIndextoIndex > lengthlength < 0,这是从前述不等式推导出的
- 参数:
-
fromIndex- 子范围的下界(包括) -
toIndex- 子范围的上界(不包括) -
length- 范围的上界(不包括) - 返回值:
-
fromIndex如果子范围在范围内 - 抛出:
-
IndexOutOfBoundsException- 如果子范围超出范围 - 自版本:
- 16
-
checkFromIndexSize
public static long checkFromIndexSize(long fromIndex, long size, long length) 检查从fromIndex(包括)到fromIndex + size(不包括)的子范围是否在从0(包括)到length(不包括)的范围内。如果以下不等式之一为真,则子范围被定义为超出范围:
fromIndex < 0size < 0fromIndex + size > length,考虑整数溢出length < 0,这是从前述不等式推导出的
- 参数:
-
fromIndex- 子区间的下界(包括) -
size- 子范围的大小 -
length- 范围的上界(不包括) - 返回值:
-
fromIndex如果子范围在范围内 - 抛出:
-
IndexOutOfBoundsException- 如果子范围超出范围 - 自版本:
- 16
-