使用==和!=來(lái)比較對(duì)象,是比較棧上兩個(gè)對(duì)象是不是指向堆上的同一個(gè)對(duì)象挪略,即引用地址是否相等历帚。
對(duì)于基本類型的常量池,JVM會(huì)自動(dòng)維護(hù)杠娱,自動(dòng)裝箱過(guò)程中取常量池中的值挽牢。但基本類型數(shù)值有其大小范圍,如:
image.png
超過(guò)這個(gè)范圍摊求,會(huì)new()新的對(duì)象禽拔,生成新的內(nèi)存地址,使用==比較的內(nèi)存地址就是不相等的室叉,因?yàn)閔ashcode()的默認(rèn)行為就是對(duì)堆上的對(duì)象產(chǎn)生獨(dú)特值睹栖,沒(méi)有重寫hashcode(),兩個(gè)對(duì)象不會(huì)相等==(即使兩個(gè)對(duì)象的數(shù)據(jù)相同)茧痕。
而equals()是執(zhí)行對(duì)象值的比較野来。所以,相同類型的包裝類對(duì)象之間值的比較踪旷,使用equals()方法曼氛。對(duì)于String 類,已經(jīng)重寫了hashCode()和equals()方法埃脏,所以==執(zhí)行的是對(duì)象相等性的比較而不是引用搪锣。