Java 常用类库之 Objects
完整名java.util.Objects
Objects
无法被继承,也无法被实例化(构造器为private
修饰)。Objects
中包含的都是public static
修饰的工具方法,这些工具方法是用于操作对象或者在操作对象前作某些检查工作的。
-
equals()
public static boolean equals(Object a, Object b) {}
判断两个对象是否相等,返回
true
- 相等,false
- 不等。使用Objects(a, b)
判断相等的方式,比调用对象本身的equals()
的方法更加安全,因为它允许对象值是null
的情况。如果a
和b
都为null
则返回true
,如果其中某一个为null
而另一个不为null
则返回false
。 -
deepEquals()
public static boolean deepEquals(Object a, Object b) {}
判断两个对象是否深度相等。他和
equals
的不同的地方是,当a
和b
都是数组时,会调用Arrays.deeqEquals()
来判断两者是否相等。 -
hashCode()
public static int hashCode(Object o) {}
返回
o
的哈希码(hash code),如果o
为null
,则返回 0。 -
hash()
public static int hash(Object... values)
为一个输入序列生成哈希码(hash code)。但是如果传入的是单个对象引用,那么它返回的哈希码不等于该对象引用的哈希码。
-
toString()
public static String toString(Object o) {}
返回参数对象
o
本身的toString()
调用结果。如果o
为null
,则返回 "null"。public static String toString(Object o, String nullDefault) {}
返回参数对象
o
本身的toString()
调用结果。如果o
为null
,则返回作为默认字符串的第二个参数nullDefault
。 -
compare()
public static <T> int compare(T a, T b, Comparator<? super T> c) {}
比较两个参数对象,如果两者相同则返回 0。否则调用
c.compare(a, b)
并返回结果,它使用某种自定义的规则比较a
和b
,返回值为整数表示a
大于b
,返回值为负数表示a
小于b
(0表示两者相同)。 -
requireNonNull()
public static <T> T requireNonNull(T obj) {}
检查指定的对象
obj
是否非空,如果为null
则抛出NullPointerException
。它主要用于在方法或构造函数中进行参数验证。public static <T> T requireNonNull(T obj, String message) {}
requireNonNull()
的重载方法,作用类似。它会在检查到参数为null
时抛出一个带有给定信息message
的异常NullPointerException
。public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {}
requireNonNull()
的重载方法,作用和上一个方法类似。不过它的异常信息时通过一个Supplier<String>
类型的参数的get()
方法提供的。 -
isNull()
public static boolean isNull(Object obj) {}
判断给定参数对象引用是否为
null
。返回true
代表为null
,false
代表非null
。 -
notNull()
public static boolean nonNull(Object obj) {}
作用与
isNull()
相反,判断给定参数对象引用是否为非null
。返回true
代表为非null
,false
代表为null
。 -
requireNonNullElse()
public static <T> T requireNonNullElse(T obj, T defaultObj) {}
如果第一个参数为非
null
,则返回第一个参数,否则返回第二个参数,第二个参数必须为非null
,否则会抛出异常NullPointerException
。 -
requireNonNullElseGet()
public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) {}
如果第一个参数为非
null
,则返回第一个参数,否则返回第二个参数supplier.get()
的结果,给结果必须为非null
,否则会抛出NullPointerException
。
以下是从 Java 9 开始加入的方法:
-
checkIndex()
int checkIndex(int index, int length) {}
检查
index
是否包含在 0 到length
(不包含)的范围内。如果在,则直接返回index
,否则抛出IndexOutOfBoundsException
。 -
checkFromToIndex()
int checkFromToIndex(int fromIndex, int toIndex, int length) {}
检查从
fromIndex
到toIndex
的子范围是否包含在 0 到length
(不包含)的范围内。如果在,则返回fromIndex
,否则抛出IndexOutOfBoundsException
。 -
checkFromIndexSize()
int checkFromIndexSize(int fromIndex, int size, int length) {}
检查从
fromIndex
到fromIndex+size
的子范围是否包含在 0 到length
(不包含)的范围内。如果在,则返回fromIndex
,否则抛出IndexOutOfBoundsException
。