前言
很多基礎(chǔ)性的原理等等什么的,不在贅述,網(wǎng)上很多相關(guān)內(nèi)容,這里僅僅是總結(jié)性并且很快能看完的結(jié)論.
java中==和equals和hashCode的區(qū)別
- ==是對(duì)內(nèi)存地址的比較,對(duì)比兩個(gè)變量是否相同, Object默認(rèn)的equals方法,是對(duì)比對(duì)象的地址,和==的結(jié)果是相同的的.但是在很多Obj的子類上面,很多都是覆寫了equals方法的,比如String 不再是對(duì)比地址,而且對(duì)比具體的值.其他類,在沒(méi)有覆寫equals的話,使用的是obj的equals方法,直接對(duì)比復(fù)合數(shù)據(jù)類型的地址.
- hashcode 會(huì)有一個(gè)大前提, 因?yàn)閔ashcode生成的是一個(gè)離散的數(shù)字,會(huì)有重復(fù)的概率,會(huì)首先得到兩個(gè)結(jié)論
(1)如果兩個(gè)復(fù)合數(shù)據(jù)類型調(diào)用equals相同,那么生成的hashcode碼是一定相同的.(2)如果兩個(gè)復(fù)合數(shù)據(jù)類型調(diào)用equals不同,那個(gè)生成的hashcode碼不一定相同. - 在Java具體中使用,體現(xiàn)在HashMap上面, HashMap在放入數(shù)據(jù)的時(shí)候首先會(huì)匹配hashcode,如果已經(jīng)不存在相同的hashcode則直接放入,如果有相同的hashcode,會(huì)再去匹配的equals方法,如果不相同則放入其中,否則就不放入其中.同樣,在get的時(shí)候會(huì)根據(jù)key.hashCode()算出數(shù)組下標(biāo),然后再看equels如果相同,就找到目標(biāo)了,具體更多的HashMap數(shù)據(jù)存取的細(xì)節(jié),就不在這里贅述了.
int與integer的區(qū)別
- int 是基本數(shù)據(jù)類型
- integer是對(duì)int的裝箱
- integer的默認(rèn)值是null,int的默認(rèn)值是0
- integer實(shí)際是對(duì)int的引用,當(dāng)new 一個(gè)Integer對(duì)象的時(shí)候 實(shí)際是生成一個(gè)指針 指向此對(duì)象,而int則是直接儲(chǔ)存對(duì)象.
談?wù)剬?duì)java多態(tài)的理解
- 首先,多態(tài)存在的幾個(gè)必要條件
(1).要有繼承 (2).要有重寫 (3).父類引用指向子類引用 - 實(shí)際使用場(chǎng)景
例如同樣的父類引用,調(diào)用方法A,但是在不同的場(chǎng)景,執(zhí)行不同的動(dòng)作,例如同樣的F1按鍵,在主界面是幫助,在聊天界面是頭像,在設(shè)置界面是關(guān)于軟件. - 多態(tài)的好處
可替換,可擴(kuò)展,接口性,靈活,簡(jiǎn)化.
String、StringBuffer、StringBuilder區(qū)別
- 首先從速度上面來(lái)說(shuō):StringBuilder->StringBuffer->String
- 其次StringBuffer對(duì)比StringBuilder來(lái)說(shuō)StringBuffer是線程安全
,里面很多方法是Synchronized - 那StringBuilder的原理又是怎么樣的?StringBuilder內(nèi)部有一個(gè)字符數(shù)組,每次組裝, 如果容量不夠,就擴(kuò)大容量,然后往里面添加字符,組裝出想要的字符串.
- 最后來(lái)說(shuō)這個(gè)String,這個(gè)要分jdk版本來(lái)說(shuō),在1.5以前,String的拼接,其實(shí)每次都是創(chuàng)建一個(gè)新的String對(duì)象來(lái)處理的,但是在1.5以后,每次+的時(shí)候,創(chuàng)建的是StringBuilder去append的,這也是為什么直接使用加號(hào)組裝字符串速度最慢的原因
繼續(xù)更新中...