java中equals的另類用法以及Objects中其他方法介紹
阿新 • • 發佈:2018-12-12
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 特點:
- Objects類被final類修飾,表示該類不能被繼承。
- Objects類的構造方法是被private修飾,表示不能直接建立物件被外部呼叫。
- 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 小結
- Objects類中為我們提供了豐富的判斷比較方法,簡化了很多額外程式碼,有利於程式碼的優化。
- 增加了程式的健壯性。
- 通過檢視並學習原始碼,我們可以從設計者的角度考慮問題,分析問題,解決問題,這讓我們的思想更進一步得到提升,這就是偉大的“java程式設計思想”!