在对象比较的时候,经常需要判空,如果是数组比较,还需要遍历每个元素,
在jdk7中,提供了一个工具类Objects。
主要为提供空指针安全的equals、hash、toString等的相应方法。其类方法概要如下:
//判断两对象是否相等
public static boolean equals(Object a, Object b);
//深度比较两对象是否相等,用于数组等形式
public static boolean deepEquals(Object a, Object b);
//返回指定对象哈希值,为null返回0
public static int hashCode(Object o);
//返回指定数组哈希值,为null返回0
public static int hash(Object… values);
//返回对象的字符串格式,为null返回“null”字符串
public static String toString(Object o);
//返回对象的字符串形式,若为null,返回指定值
public static String toString(Object o, String nullDefault);
//用指定比较器比较两对象大小
public static int compare(T a, T b, Comparator<? super T> c);
//判断对象是否为null
public static boolean isNull(Object obj);
//判断对象是否不为null
public static boolean nonNull(Object obj);
举个例子:
直接判断 objetc a object b ,会存在其中任意一个为null的情况
如果使用 Objects.equals(a,b);
里面的实现为
如果a==b 则直接返回,如果a!=null 那就调用a.quals()方法进行比较。
这样的话,a b均为null时候返回true ,a为null b不为null时候返回false, 否则就返回a.equals的比较结果
覆盖到了所有情况。
再看可以比较数组的深比较
这里面用了
可以看到还是循环去比较了每一个数组元素 ,但是比自己写方便了很多。
除了这些还有获取对象的hashcode的方法,如果对象为null,则返回0