String本質(zhì)上是類,Stirng s = new Stirng("1123")這樣的過程實(shí)際上是在創(chuàng)建對(duì)象。
int i= 0這樣的過程不是在創(chuàng)建對(duì)象,只是創(chuàng)建了一個(gè)變量。
這是從存儲(chǔ)方式上區(qū)分出來的(看java編程思想):Stirng s(s是對(duì)象的引用,而不是對(duì)象本身)int i(i變量)都存儲(chǔ)在堆棧中(堆棧不懂沒關(guān)系),new String("123")是在真正為對(duì)象創(chuàng)建存儲(chǔ)空間,這個(gè)對(duì)象(沒名字)放在堆中(理解為和堆棧不同的存儲(chǔ)位置),而0這個(gè)常量放在了常量池(另一個(gè)存儲(chǔ)的地方)。等于號(hào)是連接地址的行為
2016-09-05
1.根本上講equals和==沒有區(qū)別,在Object類中,equals()方法就是先if語句判斷是否==,如果不相等再把字符拆成char型逐位比較。如果都相等就是true,否則false。(這是程序上的區(qū)別。)
2.==是判斷兩個(gè)字符的地址是否相同(如果你知道基本類型的保存方式就會(huì)更明白,簡(jiǎn)單的說就是同一種基本類型字符在堆中只會(huì)保存一個(gè),后來的相同字符都會(huì)接到這一個(gè)地址上),也就是說,equals先判斷兩個(gè)字符地址是否相同,地址不相同再實(shí)際比較字符是否真的不同。(這是宏觀上的區(qū)別)
注意:但是不少java自帶的類中,equals()都重寫過,不一定都一樣。
最簡(jiǎn)單的,比較基本類型==和equals()都可以用,但是equals運(yùn)行慢(沒事找事才用這個(gè))。比較非基本類型都用equals()來比較是否相同,不能用==
2016-09-05
equals 方法被用來檢測(cè)兩個(gè)對(duì)象是否相等,即兩個(gè)對(duì)象的內(nèi)容是否相等,區(qū)分大小寫。
2016-09-05
equals 方法被用來檢測(cè)兩個(gè)對(duì)象是否相等,即兩個(gè)對(duì)象的內(nèi)容是否相等,區(qū)分大小寫。