文章目录
常用类库-java.util.Objects
简介
类名:public final class Objects extends Object
该类使用 final 修饰,无法被继承,类中包含 static 方法,使用类名可直接调用,方法多用于操作对象或在操作前检查某些条件。
常用方法
checkFromIndexSize
方法名:public static int checkFromIndexSize(int fromIndex, int size, int length)
作用:
判断区间 [ fromIndex , fromIndex + size ) 是否是 [ 0 , length ) 的子区间。
结果为 true 则返回 fromIndex
结果为 false 或者三个参数中的任意一个小于0则抛出异常 IndexOutOfBoundsException
实现源码:
public static <X extends RuntimeException>
int checkFromIndexSize(int fromIndex, int size, int length,
BiFunction<String, List<Integer>, X> oobef) {
if ((length | fromIndex | size) < 0 || size > length - fromIndex)
throw outOfBoundsCheckFromIndexSize(oobef, fromIndex, size, length);
return fromIndex;
}
checkFromToIndex
方法名:public static int checkFromToIndex(int fromIndex, int toIndex, int length)
作用:
判断区间 [ fromIndex , toIndex ) 是否是 [ 0 , length ) 的子区间。
结果为 true 则返回 fromIndex
结果为 false 或者三个参数中的任意一个小于0则抛出异常 IndexOutOfBoundsException
实现源码:
public static <X extends RuntimeException>
int checkFromToIndex(int fromIndex, int toIndex, int length,
BiFunction<String, List<Integer>, X> oobef) {
if (fromIndex < 0 || fromIndex > toIndex || toIndex > length)
throw outOfBoundsCheckFromToIndex(oobef, fromIndex, toIndex, length);
return fromIndex;
}
checkIndex
方法名:public static int checkIndex(int index, int length)
作用:
判断区间 [ 0 , index ) 是否是 [ 0 , length ) 的子区间 ,其中 index 不能等于 length 。
简单理解就是,index < length,使用场景可以是判断一个下标是否在数组范围内。
结果为 true 则返回 index
结果为 false 或者两个参数中的任意一个小于0则抛出异常 IndexOutOfBoundsException
实现源码:
public static <X extends RuntimeException>
int checkIndex(int index, int length,
BiFunction<String, List<Integer>, X> oobef) {
if (index < 0 || index >= length)
throw outOfBoundsCheckIndex(oobef, index, length);
return index;
}
equals
方法名:public static boolean equals(Object a, Object b)
作用:
判断对象 a 与对象 b 是否相等,相等则返回 true 否则 false 。
objects 的父类 object 同样有 equals 方法,当使用父类的方法时,若对象引用为 null 则会产生异常。而 objects 的 equals 方法即使传入的参数为 null 也可以比较。
实现源码:
public static boolean equals(Object a, Object b) {
return (a == b) || (a != null && a.equals(b));
}
方法中有调用父类的 equals ,但是调用前已进行了非空的验证( && 为短路与,当运算符左边为 false 时结果就是 false ,运算符右边的条件不会再判断),所以此处调用不会产生异常。
deepEquals
方法名:public static boolean deepEquals(Object a, Object b)
作用:
判断对象 a 与对象 b 是否深层相等,相等的判断同 equals ,深层相等理解为如果两个对象是数组对象,则更深入的比较数组里的值是否相等。应用场景是比较两个数组对象。
实现源码:
public static boolean deepEquals(Object a, Object b) {
if (a == b)
return true;
else if (a == null || b == null)
return false;
else
return Arrays.deepEquals0(a, b);
}
isNull
方法名:public static boolean isNull(Object obj)
作用:
判断传入对象 obj 是否为 null ,是则返回 true 否则返回 false 。
noNull
方法名:public static boolean noNull(Object obj)
作用:
判断传入对象 obj 是否为 null ,是则返回 false 否则返回 true ,其作用与 isNull 相反。
requireNonNull
方法名:public static <T> T requireNonNull(T obj)
作用:
验证传入对象 obj 是否为 null ,不是则返回该对象,是则抛出空指针异常 NullPointerException。
方法名:public static <T> T requireNonNull(T obj,String message)
作用:
验证传入对象 obj 是否为 null ,不是则返回该对象,是则抛出自定义的空指针异常 NullPointerException。
requireNonNullElse
方法名:public static <T> T requireNonNullElse(T obj, T defaultObj)
作用:
验证传入对象 obj 是否为 null ,不是则返回第一个参数对象 obj ,否则返回第二个参数对象 defaultObj ,若第二个参数对象也为 null 则抛出一个自定义的空指针异常 NullPointerException,信息为” defaultObj “。
实现源码:
public static <T> T requireNonNullElse(T obj, T defaultObj) {
return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj");
}
toString
方法名:public static String toString(Object o)
作用:
验证传入对象 o 是否为 null ,是则返回 “ null ”,不是则调用对象 o 的 toString 方法。
方法名:public static String toString(Object o,String nullDefault)
作用:
验证传入对象 o 是否为 null ,是则返回 nullDefault ,不是则调用对象 o 的 toString 方法。
hashCode
方法名:public int hashCode()
作用:
atic String toString(Object o,String nullDefault)`
作用:
验证传入对象 o 是否为 null ,是则返回 nullDefault ,不是则调用对象 o 的 toString 方法。
hashCode
方法名:public int hashCode()
作用:
返回对象的哈希码值。