在JVM(java虛擬機(jī))中 內(nèi)存分為棧內(nèi)存和堆內(nèi)存:
當(dāng)我們創(chuàng)建一個(gè)對(duì)象(new Object)時(shí),就會(huì)調(diào)用它的構(gòu)造函數(shù)來(lái)開(kāi)辟空間,將對(duì)象數(shù)據(jù)存儲(chǔ)到堆內(nèi)存中,與此同時(shí)在棧內(nèi)存中生成對(duì)應(yīng)的引用,當(dāng)我們?cè)诤罄m(xù)代碼中調(diào)用的時(shí)候用的都是棧內(nèi)存中的引用,基本數(shù)據(jù)類(lèi)型是存儲(chǔ)在棧內(nèi)存中。
==操作比較的是兩個(gè)變量的值是否相等,對(duì)于引用型變量表示的是兩個(gè)變量在堆中存儲(chǔ)的地址是否相同,即棧中的內(nèi)容是否相同。
equals操作表示的兩個(gè)變量是否是對(duì)同一個(gè)對(duì)象的引用,即堆中的內(nèi)容是否相同。
==比較的是2個(gè)對(duì)象的地址,而equals比較的是2個(gè)對(duì)象的內(nèi)容。
顯然,當(dāng)equals為true時(shí),==不一定為true;
(1)“==”
A.用于基本數(shù)據(jù)類(lèi)型的比較
B.判斷引用是否指向堆內(nèi)存的同一塊地址。
(2)“equals”
用于判斷兩個(gè)變量是否對(duì)同一個(gè)對(duì)象的引用。簡(jiǎn)單說(shuō)就是,堆中的內(nèi)容是否相同