java.lang包【Object類】
基本描述:
(1)Object類位於java.lang包中,java.lang包包含著Java最基礎和核心的類,在編譯時會自動導入;
(2)Object類是所有Java類的祖先。每個類都使用 Object 作為超類。所有對象(包括數組)都實現這個類的方法。可以使用類型為Object的變量指向任意類型的對象
Object的主要方法介紹:
package java.lang; public class Object { /* 一個本地方法,具體是用C(C++)在DLL中實現的,然後通過JNI調用。*/ private static native void registerNatives(); /* 對象初始化時自動調用此方法*/ static { registerNatives(); } /* 返回此 Object 的運行時類。*/ public final native Class<?> getClass(); public native int hashCode();
hashCode()方法:
hash值:Java中的hashCode方法就是根據一定的規則將與對象相關的信息(比如對象的存儲地址,對象的字段等)映射成一個數值,這個數值稱作為散列值。
情景:考慮一種情況,當向集合中插入對象時,如何判別在集合中是否已經存在該對象了?(註意:集合中不允許重復的元素存在)。
大多數人都會想到調用equals方法來逐個進行比較,這個方法確實可行。但是如果集合中已經存在一萬條數據或者更多的數據,如果采用equals方法去逐一比較,效率必然是一個問題。此時hashCode方法的作用就體現出來了,當集合要添加新的對象時,先調用這個對象的hashCode方法,得到對應的hashcode值。實際上在HashMap的具體實現中會用一個table保存已經存進去的對象的hashcode值,如果table中沒有該hashcode值,它就可以直接存進去,不用再進行任何比較了;如果存在該hashcode值, 就調用它的equals方法與新元素進行比較,相同的話就不存了,不相同就散列其它的地址。
重寫hashCode()方法的基本規則:
· 在程序運行過程中,同一個對象多次調用hashCode()方法應該返回相同的值。
· 當兩個對象通過equals()方法比較返回true時,則兩個對象的hashCode()方法返回相等的值。
· 對象用作equals()方法比較標準的Field,都應該用來計算hashCode值。
java.lang包【Object類】