Object&Objects
Object是Java中所有类的基类,位于java.lang包。Objects是Object的工具类,位于java.util包,Jdk1.7开始才出现,被final修饰不能被继承,拥有私有的构造函数。由一些静态的实用方法组成,这些方法是null-save(空指针安全的)或null-tolerant(容忍空指针的),用于计算对象的hashcode、返回对象的字符串表示形式、比较两个对象。
常用方法说明
public static <T> T requireNonNull(T obj), 判断一个对象是不是null,如果不是null则返回对象本身,如果是null则抛出空指针异常。
public static <T> T requireNonNull(T obj,String message), 判断一个对象是不是null,如果不是null则返回对象本身,如果是null则抛出空指针异常,并把第二个参数message写在异常信息中。
public static boolean equals(Object a, Object b), 比较对象a和对象b,使用的是第一个参数的equals()方法,如果两个参数中有一个是null,则返回false,如果两个参数都是null,则返回true。
public static boolean deepEquals(Object a, Object b), 比较对象a和对象b是否深度相等,使用的其实是Arrays.deepEquals()方法,只有a和b对应位置的元素都相等时,才返回true,a好b都是null也返回true,否则返回false。
public static <T> int compare(T a, T b, Comparator<? super T> c), 比较对象a和对象b,如果a和b是相等的,返回0,如果不相等,调用c的compare方法。如果a或者b是null的情况下,调用c的compare方法时有可能报空指针异常,看c的compare方法怎么写了。
public static int hash(Object… values), 得到一列对象的hash code,使用的其实是Arrays.hashCode(Object[]),Object[]数组元素就是hash方法传入的参数值。
public static int hashCode(Object o),得到一个对象的hash code,如果参数为null,返回0
public static String toString(Object o), 调用对象的toString()方法,如果参数是null,返回字符串”null”。
public static String toString(Object o, String nullDefault), 调用对象的toString()方法,如果参数是null,返回第二个参数表示的字符串。
代码示例
import java.util.Comparator;
import java.util.Objects;
public class JavaUtilsObjectsTest {
public static void main(String[] args) {
// ======================================================================//
// ===== 判空、requireNonNull
// ======================================================================//
Object result1 = Objects.requireNonNull(1);
System.out.println("requireNonNull = " + result1); // 1
try {
Object result2 = Objects.requireNonNull(null, "空指针");
System.out.println(result2); // 1
} catch (Exception e) {
System.out.println("错误消息 = " + e.getMessage()); // 空指针
}
System.out.println(Objects.isNull(null)); // true
System.out.println(Objects.isNull("")); // false
Integer compareResult = Objects.compare(new String("a"),new String("a"), new Comparator<String>(){
@Override
public int compare(String o1, String o2) {
if(o1.equals(o2)){
return 1;
}
return -1;
}
});
System.out.println(compareResult);
// ======================================================================//
// ====== 等于、equals
// ======================================================================//
Object object = new Object();
System.out.print("> Objects.equals(object, object) = ");
System.out.println(Objects.equals(object, object)); // true
System.out.print("> Objects.equals(object, new Object()) = ");
System.out.println(Objects.equals(object, new Object())); // false
System.out.print("> Objects.equals(null, null) = ");
System.out.println(Objects.equals(null, null)); // true
System.out.print("> Objects.equals(\"\", null) = ");
System.out.println(Objects.equals("", null)); // false
System.out.print("> Objects.equals(1, new Integer(1) = ");
System.out.println(Objects.equals(1, new Integer(1))); // true
System.out.print("> Objects.equals(1, new Long(1) = ");
System.out.println(Objects.equals(1, new Long(1))); // false
System.out.print("> Objects.equals((long)1, new Long(1)) = ");
System.out.println(Objects.equals((long) 1, new Long(1))); // true
System.out.print("> Objects.deepEquals(1,1) = ");
System.out.println(Objects.deepEquals(1, 1)); // true
System.out.print("> Objects.deepEquals(1,1L) = ");
System.out.println(Objects.deepEquals(1, 1L)); // false
}
}