1. 程式人生 > >java面試每日十題(二)

java面試每日十題(二)

11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?

答:switch可以作用於icsb(i see sb)上,即int、char、short、byte和他們的包裝類;不可作用於fdlb(伏地撈逼)上,即float、

double、long、boolean和他們的包裝類;也可以作用於字串型別,jdk1.7之後可以作用在String上。

12、用最有效率的方法計算2乘以8?

答:採用位運算子<<進行運算最有效率,位運算是cpu直接支援的,所以最省記憶體,速度最快。即System.out.println(2<<3);2在二進位制中是0000 0000 0000 0010,2<<3即是將1向左移3位,變為0000 0000 0001 0000,轉換為十進位制是2的4次方,等於16。

13、陣列有沒有length()方法?String有沒有length()方法?

答:陣列中沒有length()方法,求陣列的長度可以使用陣列的length屬性,String中有length()方法,用來求字串的長度。

14、在Java中,如何跳出當前的多重巢狀迴圈?

答:方法1,可以在外層迴圈前定義一個標號(如ok),然後在裡層迴圈的程式碼中使用帶有標號的break語句(如break ok)。

方法2,讓外層的迴圈條件表示式可以受到裡層迴圈體程式碼的控制。

15、構造器(constructor)是否可被重寫(override)?

答:構造器是構造方法,是不能被繼承和重寫的,因為構造器的名稱和類名相同,而繼承是類名不能相同的,所以不能繼承和重寫。但是可以過載。

16、兩個物件值相同(x.equals(y) == true),但卻可有不同的hashcode,這句話對不對?

答:對。因為如果物件重寫了equals方法,是可能出現物件equals相同,而他們的雜湊碼hashcode不同的。當然,如果物件繼承Object類,沒有重寫equals方法,那麼兩者的hashcode相同,因為Object物件的equals方法預設是用==實現的,即equals相同hashcode也相同。

17、是否可以繼承String類?

答:不可以。String類的定義是public final class String extends Object,可以看到裡面有final關鍵字,而被final關鍵字修飾的類是不可以被繼承的。

18、當一個物件被當作引數傳遞到一個方法後,此方法可改變這個物件的屬性,並可返回變化後的結果,那麼這裡到底是值傳遞還是引用傳遞?

答:值傳遞。Java中只支援引數的值傳遞,當一個物件例項作為一個引數被傳遞到方法中時,引數的值就是對該物件的引用。物件的內容可以在被呼叫的方法中改變,但物件的引用是永遠不會改變的。

19、String和StringBuilder、StringBuffer的區別?

答:String是字串常量,物件建立之後不可更改;而StringBuilder和StringBuffer是字串變數,建立的物件可以更改。執行速度上,StringBuilder>StringBuffer>String,其中String適用於少量字串操作的情況;StringBuffer很多方法帶有synchronized關鍵字,是執行緒安全的,適用於多執行緒在字元緩衝區進行大量操作的情況;StringBuilder是執行緒不安全的,適用於單執行緒下在字元緩衝區進行大量操作的情況。

20、過載(Overload)和重寫(Override)的區別。過載的方法能否根據返回型別進行區分?

答:兩者都是實現多型的方式,但過載實現的是編譯時的多型性,而重寫(覆蓋)的是執行時的多型性。過載要求在同一個類之中,方法名相同引數型別、引數個數不同;重寫發生在子類和父類之中,重寫方法的返回型別要相同,子類的比父類的更好訪問。過載對返回型別沒有特殊的要求,因為方法在呼叫時可以不將返回值賦值給一個對應的變數,即不能指定型別資訊,編譯器不知道你要呼叫哪個函式。