1. 程式人生 > >java中equals的另類用法以及Objects中其他方法介紹

java中equals的另類用法以及Objects中其他方法介紹

equals方法對於java程式設計師來說應該是常用的方法,它通常用來對字串型別的比較,通常,我們的寫法是這樣:

//案例1
Map<String,Object> map1  = new HashMap<>();
Map<String,Object> map2 = new HashMap<>();
map1.put("a","1");
map2.put("a","1");
//在業務中,由於我們通常不知道map中的value是否有值,所以,一般是這樣:
if(null != map1.get("a") && map1.get("a").equals(map2.get("a"))){
	System.out.println("ok");
}
//jdk1.7後,我們其實可以這樣
//案例2
Map<String,Object> map1  = new HashMap<>();
Map<String,Object> map2 = new HashMap<>();
map1.put("a","1");
map2.put("a","1");
if(Objects.equals(map1.get("a"), map2.get("a"))) {
	system.out.println("ok");
}


兩個案例對比,我們發現案例2比案例1少那麼一點程式碼,在實際應用中,我們用Objects.equels(Object a , Object b)無需增加null判斷,避免java.lang.NullPointException異常,尤其是對於業務量大,任務繁多,加班猛的我們,更需要簡單而高效的辦法了,不然,稍不留神,忽略value=null這個情況,又得擼起袖子debug了。。。。。
下面,我們瞭解瞭解Objects這玩意–》
1 簡介:

/**
 * 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、為物件返回一個字串表示、比較兩個物件
  從jdk1.7後新增該類
  */

2 特點:

在這裡插入圖片描述

  1. Objects類被final類修飾,表示該類不能被繼承。
  2. Objects類的構造方法是被private修飾,表示不能直接建立物件被外部呼叫。
  3. Objects類下的方法全部都是static修飾,可以直接呼叫。

3 方法介紹:
在這裡插入圖片描述//equals方法 兩種比較方式,1是比較兩者的記憶體地址是否相等,2是在非null的情況下直接比較兩者的值是否相等,兩個比較中一個成立則返回true
在這裡插入圖片描述//deepEquals深度比較,1是比較兩者的記憶體地址是否相等,2是兩者中只要存在null就返回false,3是如果傳入的是陣列型別,則比較兩者的下標對應的值是否相等。


在這裡插入圖片描述//hashCode方法 返回的是入參的hashCode數
在這裡插入圖片描述//hash方法 返回一個基於內容的雜湊碼
在這裡插入圖片描述//toString方法 將入參轉為字串型別(插曲:幾年前之前在學校有同學問我,int型別怎麼轉String,我去,糾結了好久,後來想到在後面+"",現在,我們還可以這樣玩。。。。),如果傳入null,也不會報錯,返回null
在這裡插入圖片描述//compare方法 使用指定的比較器c 比較引數a和引數b的大小(相等返回0,a大於b返回整數,a小於b返回負數)
在這裡插入圖片描述//requireNonNull方法 判斷傳入的物件是否null,是null直接返回空指標異常。
在這裡插入圖片描述//isNull方法 判斷物件是否是null,如果是null返回true,不是返回false.
在這裡插入圖片描述nonNull方法 判斷物件是否不等於null,如果是返回true,否則返回false.
在這裡插入圖片描述requireNonNull方法 如果傳入的obj為null丟擲NullPointerException並可以指定錯誤資訊message,否者返回該物件

4 小結

  1. Objects類中為我們提供了豐富的判斷比較方法,簡化了很多額外程式碼,有利於程式碼的優化。
  2. 增加了程式的健壯性。
  3. 通過檢視並學習原始碼,我們可以從設計者的角度考慮問題,分析問題,解決問題,這讓我們的思想更進一步得到提升,這就是偉大的“java程式設計思想”!