這篇文章主要記錄在開發(fā)中容易混淆和使用出現(xiàn)錯誤的知識點,稍作整理,后續(xù)會持續(xù)更新
?equals和==的區(qū)別
?==
- 是一個運算符
- 比較兩個對象的棧內(nèi)存地址是否相同
- 可以比較基本數(shù)據(jù)類型的值是否相等
Equalse
- string對象的方法
- 比較兩個對象的棧內(nèi)存地址是否相同
- 既可以表示兩個對象的內(nèi)存地址是否相同,又可以表示值是否相同
NULL和“”的區(qū)別
?NULL
-代表一個空對象
-除了=和==,一般不執(zhí)行其他操作
-String s=null;只是定義了一個句柄,也就是說你有了引用,但引用并未任何內(nèi)存空間
“”
-代表一個對象實例,這個對象實例的值是一個長度為0的空字符串
-是一個空字符串,可以執(zhí)行字符串里的方法
-String s="";這個引用已經(jīng)指向了一塊是空字符串的內(nèi)存空間,可以對其進行任何操作
?單引號和雙引號
?單引號
-單引號的數(shù)據(jù)是char類型
-只能引一個字符
?雙引號
-雙引號的數(shù)據(jù)是string類型
-可以引0個及其以上
?wait、sleep和Yield的區(qū)別
wait
-Condition/Object的方法
-執(zhí)行環(huán)境:同步代碼塊內(nèi)
-是否釋放持有的鎖:釋放
-調(diào)用后何時恢復(fù):某個線程調(diào)用對應(yīng)的nofity/signal方法喚醒后進入就緒狀態(tài)
sleep
-Thread的方法
-執(zhí)行環(huán)境:任意位置
-是否釋放持有的鎖:不釋放
-調(diào)用后何時恢復(fù):指定時間后
?Yield
-Thread的方法
-執(zhí)行環(huán)境:任意位置
-是否釋放持有的鎖:不釋放
-調(diào)用后何時恢復(fù):立即進入就緒狀態(tài)
?overload和override的區(qū)別
?overload(重載)
-參數(shù)類型、個數(shù)、順序至少有一個不相同;
-不能重載只有返回值不同的方法名;
-存在于父類和子類、同類中;
override(重寫)
-方法名、參數(shù)、返回值相同
-子類方法不能縮小父類方法的訪問權(quán)限
-子類方法不能拋出比父類更多的異常(但子類方法可以不拋出異常)
-存在于父類和子類之間
-方法被定義為final不能被重寫
?String、StringBuffer與StringBuilder之間區(qū)別
?String
-字符串常量
-執(zhí)行速度:最慢
-操作少量數(shù)據(jù)時使用
StringBuffer
-字符串變量
-執(zhí)行速度:稍快
-多線程操作字符串緩沖區(qū)下大量數(shù)據(jù)時使用
-線程安全的
?StringBuilder
-字符串變量
-執(zhí)行速度:最快
-單線程操作字符串緩沖區(qū)下大量數(shù)據(jù)時使用
-線程非安全的
?Collection 和 Collections的區(qū)別
?Collection
-是一個集合接口(集合類的一個頂級接口)
-繼承與他的接口主要有Set 和List
-它提供了對集合對象進行基本操作的通用接口方法
?Collections
-是集合類的一個工具類/幫助類
-其中提供了一系列靜態(tài)方法,用于對集合中元素進行排序、搜索以及線程安全等各種操作
ArrayList,Vector, LinkedList的存儲性能和特性
?ArrayList
-ArrayList 采用的是數(shù)組形式來保存對象的
-此數(shù)組元素數(shù)大于實際存儲數(shù)據(jù)以便增加和插入元素
-允許直接用序號索引元素
-索引數(shù)據(jù)快而插入數(shù)據(jù)慢
-線程不安全的,不是同步的
-當(dāng)需要增長時,ArrayList卻是原來的一半
?Vector
-ArrayList 采用的是數(shù)組形式來保存對象的
-此數(shù)組元素數(shù)大于實際存儲數(shù)據(jù)以便增加和插入元素
-允許直接用序號索引元素
-索引數(shù)據(jù)快而插入數(shù)據(jù)慢
-線程安全的,也就是說是同步的
-當(dāng)需要增長時,Vector默認(rèn)增長為原來一培
LinkedList
-使用雙向鏈表方式存儲數(shù)據(jù)
-按序號索引數(shù)據(jù)需要前向或后向遍歷數(shù)據(jù)
-索引數(shù)據(jù)慢,插入的速度快
?HashMap和Hashtable的區(qū)別
?HashMap
-線程不安全
-允許有null的鍵和值
-效率高一點
-方法不是Synchronize的要提供外同步
-有containsvalue和containsKey方法
-HashMap是Hashtable的輕量級實現(xiàn)
?Hashtable
-線程安全
-不允許有null的鍵和值
-效率稍低
-方法是是Synchronize的
-有contains方法
-Hashtable 比HashMap 要舊
?final, finally, finalize的區(qū)別
?final
-用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承
?finally
-是異常處理語句結(jié)構(gòu)的一部分,表示總是執(zhí)行
finalize
-是Object類的一個方法,在垃圾收集器執(zhí)行的時候會調(diào)用被回收對象的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關(guān)閉文件等。
?error和exception有什么區(qū)別?
?error
-Error類的父類都是throwable類
-Error類一般是指與虛擬機相關(guān)的問題,如系統(tǒng)崩潰,虛擬機錯誤,內(nèi)存空間不足,方法調(diào)用棧溢等
-對于這類錯誤的導(dǎo)致的應(yīng)用程序中斷,僅靠程序本身無法恢復(fù)和和預(yù)防,遇到這樣的錯誤,建議讓程序終止。
exception
-Exception類的父類都是throwable類
-Exception類表示程序可以處理的異常,可以捕獲且可能恢復(fù)
-遇到這類異常,應(yīng)該盡可能處理異常,使程序恢復(fù)運行,而不應(yīng)該隨意終止異常
?abstract class和interface有什么區(qū)別?
?abstract class
-抽象類可以有構(gòu)造方法
-抽象類中可以有普通成員變量
-抽象類中可以包含非抽象的普通方法
-抽象類中的抽象方法的訪問類型可以是public,protected和默認(rèn)類型
-抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意
-抽象類類可以實現(xiàn)多個接口,但只能單繼承
?interface
-接口中不能有構(gòu)造方法
-接口中沒有普通成員變量
-接口中的所有方法必須都是抽象的,不能有非抽象的普通方法
-但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public abstract類型
-但接口中定義的變量只能是public static final類型,并且默認(rèn)即為public static final類型
-接口只可以繼承一個或多個其它接口
正斜杠/和反斜杠\的區(qū)別
正斜杠/
從右寫到左(右傾)
表示除法,如120/60 = 2;表示單位(除法的變形),如60km/h
表示路徑;Unix使用斜桿/ 作為路徑分隔符;如果代表的是網(wǎng)絡(luò)文件路徑,則必須使用 正斜杠/
反斜杠\
從左寫到右(左傾)
符表示轉(zhuǎn)義字符,如\0表示“空字符”\r表示“回車”,\n表示“換行”等。
表示路徑;如果代表的是windows文件路徑,則使用 正斜杠/和 反斜杠\是一樣的