1. 程式人生 > 其它 >Java面試題系列之基礎部分(四)——每天學5個問題

Java面試題系列之基礎部分(四)——每天學5個問題

Java基礎部分學習的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,執行緒的語法,集合的語法,io的語法,虛擬機器方面的語法,這些都是最基本而且最易問到的,我們只要每天學一點點,日積月累知識面會更廣。

網路配圖

1、如何把一段逗號分割的字串轉換成一個數組?

如果不查jdk api,我很難寫出來!我可以說說我的思路:

(1)、用正則表示式,程式碼大概為:String [] result = orgStr.split(“,”);

(2)、用 StingTokenizer ,程式碼為:StringTokenizer tokener = StringTokenizer(orgStr,”,”);

String [] result =new String[tokener .countTokens()];

Int i=0;

while(tokener.hasNext(){result[i++]=toker.nextToken();}

2、陣列有沒有length()這個方法? String有沒有length()這個方法?

陣列沒有length()這個方法,有length的屬性;String有有length()這個方法。

3、下面這條語句一共建立了多少個物件:String s="a"+"b"+"c"+"d";

答:對於如下程式碼:

String s1 = "a";
String s2 = s1 + "b";
String s3 = "a" + "b";
System.out.println(s2 == "ab");
System.out.println(s3 == "ab");

網路配圖

第一條語句列印的結果為false,第二條語句列印的結果為true,這說明javac編譯可以對字串常量直接相加的表示式進行優化,不必要等到執行期去進行加法運算處理,而是在編譯時去掉其中的加號,直接將其編譯成一個這些常量相連的結果。

題目中的第一行程式碼被編譯器在編譯時優化後,相當於直接定義了一個”abcd”的字串,所以,上面的程式碼應該只建立了一個String物件。寫如下兩行程式碼,

String s ="a" + "b" + "c" + "d";

System.out.println(s== "abcd");

最終列印的結果應該為true。

4、final, finally, finalize的區別。

final 用於宣告屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

內部類要訪問區域性變數,區域性變數必須定義成final型別,finally是異常處理語句結構的一部分,表示總是執行。

finalize是Object類的一個方法,在垃圾收集器執行的時候會呼叫被回收物件的此方法,可以覆蓋此方法提供垃圾收集時的其他資源回收,例如關閉檔案等;JVM不保證此方法總被呼叫。

網路配圖

5、String和StringBuffer的區別

JAVA平臺提供了兩個類:String和StringBuffer,它們可以儲存和操作字串,即包含多個字元的字元資料,這個String類提供了數值不可改變的字串,而這個StringBuffer類提供的字串進行修改。

當你知道字元資料要改變的時候你就可以使用StringBuffer,典型地做法,你可以使用StringBuffers來動態構造字元資料;另外,String實現了equals方法,new String(“abc”).equals(newString(“abc”)的結果為true,而StringBuffer沒有實現equals方法,所以,new StringBuffer(“abc”).equals(newStringBuffer(“abc”)的結果為false。

接著要舉一個具體的例子來說明,我們要把1到100的所有數字拼起來,組成一個串;

StringBuffer sbf = new StringBuffer();
for(int i=0;i<100;i++)
{
sbf.append(i);
}

上面的程式碼效率很高,因為只建立了一個StringBuffer物件,而下面的程式碼效率很低,因為建立了101個物件。

String str = new String();
for(int i=0;i<100;i++)
{
str = str + i;
}

在講兩者區別時,應把迴圈的次數搞成10000,然後用endTime-beginTime來比較兩者執行的時間差異,最後還要講講StringBuilder與StringBuffer的區別。

String覆蓋了equals方法和hashCode方法,而StringBuffer沒有覆蓋equals方法和hashCode方法,所以,將StringBuffer物件儲存進Java集合類中時會出現問題。