Object類是所有類的最終父類,其內部封裝了一些方法,之前瞭解不夠,專門總結如下。
1. hashCode()
此方法通過哈希映射,通過對象的相關信息(對象存儲物理地址,字段信息等)映射爲一個數值,這個數值稱之爲散列值。
這個散列值通常同於在集合中對象的重複性檢查,因爲集合中不允許出現重複的對象,所以再添加前通常要檢查集合內是否已存在對象,一種方案是通過equals,與集合中元素逐個比較,但當集合中元素過多時,這種方案會非常影響系統運行效率,其實集合中內置了一個table,其中保存了集合中所有對象的hashCode()值,如果hashCode值相等後再調用equals()進行比較,這種方案的效率會遠高於直接使用equals();
hashCode()方法的重寫
hashCode()方法允許重寫,但是重寫的方法需滿足以下要求
- 在程序運行過程中,同一個對象多次調用hashCode()方法應該返回相同的值。
- 當兩個對象通過equals()方法比較返回true時,則兩個對象的hashCode()方法返回相等的值。
- 對象用作equals()方法比較標準的Field,都應該用來計算hashCode值。
2. clone()
此方法快速生成已有對象的副本,這是一個native方法(用C++寫的),native方法執行效率高於Java內的方法,所以在複製一個對象一般採用clone()方法,而不是new一個對象,再將對象的值寫入
3. finalize()
垃圾回收器準備釋放內存的時候,會先調用finalize()。
- 對象不一定會被回收。
- 垃圾回收不是析構函數。
- 垃圾回收只與內存有關。
- 垃圾回收和finalize()都是靠不住的,只要JVM還沒有快到耗盡內存的地步,它是不會浪費時間進行垃圾回收的。