宣告
文章皆為本人技術筆記,轉載請註明出處https://segmentfault.com/u/yzwall
Object類別簡介
#Object類別是所有類別的父類,在Java中只有基本資料型別不是物件。對於所有陣列型別(物件型別&&基本資料型別陣列)都繼承自Object類別;
equals方法
Object類別中判斷兩個物件是否具有相同引用,從而判斷兩個物件是否相同;
子類別只要重寫equals方法,就必須重寫hashCode方法
// in java.lang.Object public boolean equals(Object obj) { return (this == obj); }
重寫equals方法原則:
#自反性:A.equals(A)回傳true;
對稱性:A.equals(B)結果和B.equals(A)相同;
傳遞性:A.equals(B)為true,B.equals(C)為true,則A. equals(C)為true
一致性:對於非null引用A,B, 只要equals()比較運算所用到物件資訊不變,多次呼叫A.equals(B),結果一致;
對於任何非null引用,x.equals(null)必須傳回false;
重寫equals方法時,參數類型必須為Object類型
#重寫equals方法範例
class myObject { private String name; private int age; ... public getName() { return this.name; } public getAge() { return this.age; } } /** * 重写equals方法demo步骤 * Effective Java中推荐方式 */ public boolean equals(Object x) { // 1. 检查x和this是否引用同一个对象 if (x == this) { return true; } // 2. 检查x对象类型是否是myObject派生 if (!(x instanceof myObject)) { return false; } // 3. 比较数据域 // 经过1,2检查,将参数转换为正确类型 myObject o = (myObject)(x); return this.name.equals(x.getName()) && this.age == (x.getAge()); }
hashCode()方法
hashCode方法
傳回物件的雜湊碼,相等物件必須傳回相等的hashCode,不同物件的hashCode盡可能不相等;
// in java.lang.Object public native int hashCode();
重寫equals時總是要重寫hashCode
重寫equals不重寫hashCode,會導致「不相等物件擁有相同的hashCode」,導致集合類別
HashMap
,HashSet
和Hashtable
無法運作;極端情況下,在散列表中使所有物件的hashCode都相等,所有物件都被映射到同一個桶中,散列表退化成鍊錶;當兩個物件呼叫equal返回true,則兩個物件各自呼叫hashCode()傳回相同hashCode;
當兩個物件呼叫equal回傳false, 兩個物件各自呼叫hashCode()回傳的hashCode可以相同(雜湊衝突不能完全避免 )
toString()方法
Object類別中toString方法,輸出物件的「物件類別名稱@散列碼」;
Java Object類別方法分析
宣告
文章皆為本人技術筆記,轉載請註明出處https://segmentfault.com/u/ yzwall
Object類別簡介
Object類別是所有類別的父類,在Java中只有基本資料類型不是物件。對於所有陣列型別(物件型別&&基本資料型別陣列)都繼承自Object類別;
equals方法
Object類別中判斷兩個物件是否具有相同引用,從而判斷兩個物件是否相同;
子類別只要重寫equals方法,就必須重寫hashCode方法
// in java.lang.Object public boolean equals(Object obj) { return (this == obj); }
重寫equals方法原則:
#自反性:A.equals(A)回傳true;
對稱性:A.equals(B)結果和B.equals(A)相同;
傳遞性:A.equals(B)為true,B.equals(C)為true,則A. equals(C)為true
一致性:對於非null引用A,B, 只要equals()比較運算所用到物件資訊不變,多次呼叫A.equals(B),結果一致;
對於任何非null引用,x.equals(null)必須傳回false;
重寫equals方法時,參數類型必須為Object類型
#重寫equals方法範例
class myObject { private String name; private int age; ... public getName() { return this.name; } public getAge() { return this.age; } } /** * 重写equals方法demo步骤 * Effective Java中推荐方式 */ public boolean equals(Object x) { // 1. 检查x和this是否引用同一个对象 if (x == this) { return true; } // 2. 检查x对象类型是否是myObject派生 if (!(x instanceof myObject)) { return false; } // 3. 比较数据域 // 经过1,2检查,将参数转换为正确类型 myObject o = (myObject)(x); return this.name.equals(x.getName()) && this.age == (x.getAge()); }
hashCode()方法
hashCode方法
傳回物件的雜湊碼,相等物件必須傳回相等的hashCode,不同物件的hashCode盡可能不相等;
// in java.lang.Object public native int hashCode();
重寫equals時總是要重寫hashCode
重寫equals不重寫hashCode,會導致「不相等物件擁有相同的hashCode」,導致集合類別
HashMap
,HashSet
和Hashtable
無法運作;極端情況下,在散列表中使所有物件的hashCode都相等,所有物件都被映射到同一個桶中,散列表退化成鍊錶;當兩個物件呼叫equal返回true,則兩個物件各自呼叫hashCode()傳回相同hashCode;
當兩個物件呼叫equal回傳false, 兩個物件各自呼叫hashCode()傳回的hashCode可以相同(雜湊衝突不能完全避免 )
toString()方法
Object類別中toString方法,輸出物件的「物件類別名稱@散列碼」;
以上是Java中Object類別的方法分析的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。