一、Object類的作用
Java中的所有類都直接或者間接地繼承自Object類,Object類是Java中的根類,提供了一些通用的方法,比如equals()、hashCode()和toString()等。可以將Object類看成是Java中所有類的默認父類。Object類的用途有以下幾個方面:
- 所有Java類繼承自Object類;
- Object類定義了一些通用的方法;
- Object類可以作為任何類型對象的引用;
- Object類實現了所有 Java 對象的基本行為。
二、equals()方法
equals()方法是Object類中的一個方法,用於比較兩個對象是否相等。通過equals()方法可以判斷任意兩個對象是否相等,無論它們是不是同一個對象。equals()方法的默認實現是比較兩個對象的引用是否相等,也就是是否指向同一個對象,但是在實際應用中,equals()方法需要被重寫以滿足業務需求。以下是一個自定義的equals()方法的示例:
public class Employee{ private String name; private int salary; public Employee(String name, int salary){ this.name = name; this.salary = salary; } public boolean equals(Object o){ if(o == null) return false; if(!(o instanceof Employee)) return false; Employee other = (Employee) o; return this.name.equals(other.name) && this.salary == other.salary; } }
上述代碼中,我們重寫了Object類中的equals()方法,將其重寫為比較兩個Employee對象的name和salary是否相等。
三、hashCode()方法
hashCode()方法也是Object類中的一個方法,用於獲取對象的哈希碼。哈希碼是一個整數,由對象的內存地址和其它信息計算得出。在使用哈希表等數據結構時,哈希碼可以用來快速查找對象。以下是一個hashCode()方法的示例:
public class Employee{ private String name; private int salary; public Employee(String name, int salary){ this.name = name; this.salary = salary; } public int hashCode(){ int result = 17; result = 31 * result + name.hashCode(); result = 31 * result + salary; return result; } }
上述代碼中,我們通過重寫hashCode()方法來計算一個Employee對象的哈希碼。這裡使用了一個比較常用的計算方法,具體來說,我們先把哈希值設為一個常數,然後依次對每個屬性進行計算。在計算哈希值時,就像平常運算一樣,乘法的優先順序高於加法。同時,選擇31作為乘數和17作為哈希值的初始值,主要是因為31是一個比較好的質數,而17也是一個奇數,能夠充分利用哈希的演算法特性。
四、toString()方法
toString()方法也是Object類中定義的方法,用於獲取對象的字元串表示形式。ToString()方法返回的字元串包含了對象的類型以及對象的屬性信息。默認情況下,ToString()方法返回的字元串是以類名@hashcode的形式輸出的,但是在實際應用中,ToString()方法需要被重寫以滿足業務需求。以下是一個ToString()方法的示例:
public class Employee{ private String name; private int salary; public Employee(String name, int salary){ this.name = name; this.salary = salary; } public String toString(){ return "Employee: name=" + name + ", salary=" + salary; } }
上述代碼中,我們重寫了Object類中的ToString()方法,將其重寫為輸出Employee對象的name和salary。這種自定義的ToString()方法擁有更好的可讀性和易用性。
五、繼承自Object類的方法總結
除了上述介紹的equals()、hashCode()和toString()方法以外,Object類還提供了許多其它的方法,如下表所示:
方法名 | 功能描述 |
getClass() | 返回當前對象的類 |
notify() | 喚醒等待該對象鎖的一個線程 |
notifyAll() | 喚醒等待該對象鎖的所有線程 |
wait() | 讓當前線程等待該對象鎖 |
wait(long timeout) | 讓當前線程等待該對象鎖一段時間 |
wait(long timeout, int nanos) | 讓當前線程等待該對象鎖一段時間 |
finalize() | 垃圾回收器調用該方法,用於釋放對象的資源 |
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/254519.html