1. 程式人生 > >JDK7新增Objects方法介紹(同時包含JDK8新添加的方法)

JDK7新增Objects方法介紹(同時包含JDK8新添加的方法)

整數 inter 新增 int pub and arrays 內存 字符串表

前言

JDK7裏面新增的Objects類,該類的主要用途是將操作對象的一切常用操作進行的封裝。包括hashCode、equals等。
本文是以java8版本介紹Objects類,所以也會介紹一下java8新增的方法。

Objects類簡介

/**
 * This class consists of {@code static} utility methods for operating
 * on objects.  These utilities include {@code null}-safe or {@code
 * null}-tolerant methods for computing the hash code of an object,
 * returning a string for an object, and comparing two objects.
 *
 * @since 1.7
 */  
本類由一些操作對象的靜態工具方法構成,這些工具方法包括了非空檢查、方法的非空參數檢查、
比較對象的hashCode、為對象返回一個字符串表示、比較兩個對象
從1.7開始添加該類

Objects特點

1.該類是使用final修飾,不能被繼承
2.該類的構造方法被私有化(使用private修飾),不能直接創建對象
3.該類中所有的方法都是靜態方法,可以使用類型直接調用(對應2,該類不需要創建對象)

Objects內方法介紹

//比較兩個對象是否相等(首先比較內存地址,然後比較a.equals(b),只要符合其中之一返回true)
public static boolean equals(Object a, Object b);

//深度比較兩個對象是否相等(首先比較內存地址,相同返回true;如果傳入的是數組,則比較數組內的對應下標值是否相同)
public static boolean deepEquals(Object a, Object b);

//返回對象的hashCode,若傳入的為null,返回0
public static int hashCode(Object o);

//返回傳入可變參數的所有值的hashCode的總和(這裏說總和有點牽強,具體參考Arrays.hashCode()方法)
public static int hash(Object... values);

//返回對象的String表示,若傳入null,返回null字符串
public static String toString(Object o)

//返回對象的String表示,若傳入null,返回默認值nullDefault
public static String toString(Object o, String nullDefault)

//使用指定的比較器c 比較參數a和參數b的大小(相等返回0,a大於b返回整數,a小於b返回負數)
public static <T> int compare(T a, T b, Comparator<? super T> c) 

//如果傳入的obj為null拋出NullPointerException,否者返回obj
public static <T> T requireNonNull(T obj) 

//如果傳入的obj為null拋出NullPointerException並可以指定錯誤信息message,否者返回obj
public static <T> T requireNonNull(T obj, String message)

-----------------------------以下是jdk8新增方法---------------------------

//判斷傳入的obj是否為null,是返回true,否者返回false
public static boolean isNull(Object obj)

//判斷傳入的obj是否不為null,不為空返回true,為空返回false (和isNull()方法相反)
public static boolean nonNull(Object obj)

//如果傳入的obj為null拋出NullPointerException並且使用參數messageSupplier指定錯誤信息,否者返回obj
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier)

案例

//equals
String str1 = "hello";
String str2 = "world";
int i1 = 1;
int i2 = 2;
int[] arr1 = {1,2};
int[] arr2 = {1,2};
//傳入對象
System.out.println(Objects.equals(str1, str2));//false
//傳入數組
System.out.println(Objects.equals(i1, i2));//false

//deepEquals
//傳入對象
System.out.println(Objects.equals(str1, str2));//false
//傳入數組
System.out.println(Objects.deepEquals(arr1, arr2));//true

//hashCode
//傳入對象
System.out.println(Objects.hashCode(str1));//99162322
//傳入null
System.out.println(Objects.hashCode(null));//0

//hash,調用Arrays.hashCode()方法
//傳入數組
System.out.println(Objects.hash(arr1));//1627674101

//compare
System.out.println(Objects.compare(i1, i2, Integer::compareTo));//-1

//requireNonNull
String test = null;
//java.lang.NullPointerException
String s1 = Objects.requireNonNull(test);

//java.lang.NullPointerException: 這是空指針異常提示的信息
String s2 = Objects.requireNonNull(test, "這是空指針異常提示的信息");

//java.lang.NullPointerException: 我是返回的異常信息
String s3 = Objects.requireNonNull(test,()->"我是返回的異常信息");

總結

Objects類給我們提供了一些常用的操作對象的方法,我們可以直接使用,這是非常方便的。isNull()方法和nonNull
()方法,在我們寫方法時需要判斷傳入的參數是否為null可以使用該方法及其方便。

JDK7新增Objects方法介紹(同時包含JDK8新添加的方法)