Java Objects工具類原理及用法詳解
Objects工具類
jdk 1.7引進的工具類,都是靜態調用的方法,jdk 1.8新增了部分方法
重點方法
equals
用于字符串和包裝對象的比較,先比較內存地址,再比較值
deepEquals
數組的比較,先比較內存地址,再比較值,如String、char、byte、int數組,或者包裝類型Integer等數組
hashCode
返回對象的hashCode,若傳入的為null,則返回0
hash
傳入可變參數的所有值得hashCode的總和,底層用Arrays.hashCode
可變參數
重寫HashCode和Equals
HashCode方法
頂級類Object里面的方法,所有類都是繼承Object的,返回值int類型
根據一定的hash規則(存儲地址,字段,或者長度等),映射成一個數值,即散列值
Equals方法
頂級類Object里面的方法,所有類都是繼承Object的,返回值boolean類型
根據自定義的匹配規則,用于匹配兩個對象是否一樣,一般邏輯
//判斷地址是否⼀樣//⾮空判斷和class類型判斷//強轉//對象⾥⾯的字段⼀⼀匹配
重寫規則
class User { private int age; private String name; private Date time; // 省略setter和getter⽅法 @Override public boolean equals(Object o) { if (this == o)return true; if (o == null || getClass() != o.getClass())return false; User user = (User) o; return age == user.age && Objects.equals(name, user.name) && Objects.equals(time, user.time); } @Override public int hashCode() { return Objects.hash(age, name, time); } }
問題:當向集合中插入對象時,如何判別在集合中是否已經存在該對象,比如Set確保存儲對象的唯一,并判斷是不是同一個對象呢?
依據hashCode和equals進行判斷,所以Set存儲的對象必須重寫這兩個方法 判斷兩個對象是否一樣,首先判斷插入obj的hashCode值是否存在,hashCode值不存在則直接插入集合,值存在則還需要判斷equals方法判斷對象是否相等以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。
相關文章:
1. Express 框架中使用 EJS 模板引擎并結合 silly-datetime 庫進行日期格式化的實現方法2. 一篇文章帶你了解JavaScript-對象3. Java構建JDBC應用程序的實例操作4. IntelliJ IDEA設置條件斷點的方法步驟5. IDEA的Mybatis Generator駝峰配置問題6. Python使用oslo.vmware管理ESXI虛擬機的示例參考7. javascript設計模式 ? 建造者模式原理與應用實例分析8. Spring應用拋出NoUniqueBeanDefinitionException異常的解決方案9. python flask框架快速入門10. ThinkPHP5 通過ajax插入圖片并實時顯示(完整代碼)
