Java對(duì)象的引用中存放的到底是對(duì)象的首地址還是散列碼?
是這樣的,Java對(duì)象都有一個(gè)屬性是hashcode,這個(gè)是object的屬性,而所有對(duì)象都繼承自object類.就是說(shuō)銀河一個(gè)java對(duì)象都有這個(gè)值.
這個(gè)值是干什么用的呢?這個(gè)值主要是用來(lái)標(biāo)識(shí)對(duì)象的唯一性的,比如你有個(gè)類叫做A類,有兩個(gè)實(shí)例化對(duì)象A a = new A(); A b = new A();這個(gè)時(shí)候,如果想比較a和b是不是一個(gè)對(duì)象?怎么比?就需要調(diào)用equals方法,equals方法默認(rèn)的就是通過(guò)hashcode這個(gè)值來(lái)比較.
那么什么時(shí)候equals方法是返回true呢?默認(rèn)的情況是只有當(dāng)兩個(gè)比較對(duì)象(這里是a,b)是一個(gè)對(duì)象的時(shí)候,所謂一個(gè)對(duì)象就是引用的一個(gè)地址空間內(nèi)的對(duì)象(你也應(yīng)該知道,java對(duì)象其實(shí)都是jvm內(nèi)存中對(duì)象的一個(gè)引用).
而這個(gè)hashcode存儲(chǔ)的正是當(dāng)前變量引用的對(duì)象的地址!
希望你明白了,切記想問(wèn)題應(yīng)該要舉一反三,這樣才能收獲更多.希望幫助了你.