一、面試準備-Java知識
1、String.valueof()、(String)、toString()的區別
答案:
(String)進行轉換的時候,如果型別不匹配會丟擲型別轉換異常。因此在轉化的時候如果不確定該型別是否為String型別,需要先用instanceof進行型別判斷。
toString()是java.lang.Object類裡已有的public方法。在使用時要注意,必須保證object不是null值,否則將丟擲NullPointerException異常。toString()不會關注型別的轉換,toString()方法返回的是該物件的字串。
String.valueOf()是String的靜態方法,可直接通過String呼叫。String.valueOf()方法會將非空的物件直接呼叫其toString方法。但是為空的情況下會返回"null"而不是null。
2、過載(Overload)和重寫(Override)
答案:
過載:過載是指同一個類中的多個方法具有相同的名字,但這些方法具有不同的引數列表,即引數的數量或引數型別不能完全相同。
a.通過傳遞給它們的不同引數個數和引數型別來決定具體使用哪個方法,也就是多型性。
b.返回值型別可以相同也可以不同。不能以返回值型別作為過載函式的區分標準。
重寫:重寫是存在子父類之間的,子類定義的方法與父類中的方法具有相同的方法名字,相同的引數列表和相同的返回型別。
子類可以繼承父類中的方法,而不需要重新編寫相同的方法。但有時子類並不想原封不動的繼承父類的方法,而是想做一定的修改。重寫又稱覆蓋。
a.子類中不能重寫父類中的final方法但是必須重寫父類中的abstract方法。
區別:
方法的過載和重寫都是實現多型的方式,區別在於前者實現的是編譯時的多型性,而後者實現的是執行時的多型性。過載發生在一個類中,同名的方法如果有不同的引數列表(引數型別不同、引數個數不同或者二者都不同)則視為過載;重寫發生在子類與父類之間,重寫要求子類被重寫方法與父類被重寫方法有相同的引數列表,有相容的返回型別,比父類被重寫方法更好訪問,不能比父類被重寫方法宣告更多的異常。過載對返回型別沒有特殊的要求,不能根據返回型別進行區分。
3、面向物件特徵之一---多型性
答案:
存在多型的前提條件:
a.有繼承的關係
b.子類重寫父類的方法
c.父類的引用指向子類的物件
多型性是面向物件程式設計的一種特性,和方法無關。分為靜態多型性
同樣的一個方法能夠根據輸入資料的不同,做出不同的處理,即方法的過載--有不同的引數列表==>靜態多型性。
當子類繼承自父類的相同方法,輸入資料一樣,但要做出有別於父類的響應時,就要重寫父類方法,即在子類中重寫該方法--相同引數列表,不同實現==>動態多型性。
4、String、StringBuffer與StringBuilder之間的區別
答案:
執行速度:StringBuilder>StringBuffer>String
String為字串常量,而StringBuilder和StringBuffer均為字串變數,即String物件一旦建立之後該物件是不可更改的,但後兩者的物件是變數,是可以更改的。
執行緒安全:線上程安全上,StringBuilder是執行緒不安全的,而StringBuffer是執行緒安全的。
String適用於少量的字串操作的情況。
StringBuffer適用於多執行緒下在字元緩衝區進行大量操作的情況。
StringBuilder適用於單執行緒下在字元緩衝區進行大量操作的情況。
5、list、set、map的區別
答案:
list、set都是繼承自Collection介面,map不是。
list存放元素有序,可重複。set存放元素無序,不可重複
list查詢元素效率高,插入和刪除元素效率低。set查詢元素效率低,插入和刪除元素效率高。