一些比較核心的Java問題常常會用來考驗面試者的Java基本知識功底。這篇文章列出來了一些在個人書裏面沒有的面試題,經過這些面試題讀者也能夠梳理一下Java基礎知識點。html
Q1.下面的代碼片斷會輸出什麼?java
1
2
3
4
|
String s =
" Hello "
;
s +=
" World "
;
s.trim( );
System.out.println(s);
|
A1.正確輸出是」 Hello World 「。面試
因爲字符串先後都有空格,由於有些人可能會認爲結果是」Hello World」。那麼,這個題目想要考察的是什麼呢?安全
1. 字符串對象(String Object)是非可變的(immutable),這個題目容易迷惑人的地方在s.trim( )這一行。app
2. 理解對象引用和不可達對象會由垃圾回收器收集。ui
順着這個題目,你以爲還能夠考察哪些概念呢?spa
1. 例如,上面的代碼中一共會生成幾個字符串對象,何時這些對象會變成不可達對象從而被垃圾回收器回收。線程
2. 又好比,上面的代碼的效率如何?code
最好的解釋方式是經過一個圖表來講明,以下:htm
若是須要輸出先後沒有空格的」Hello World」,那麼應該將s.trim( )再賦值給」s」。這個賦值操做可讓s指向新建立出來的字符串對象。
上面的代碼也能夠改寫成以下方式:
1
2
3
|
StringBuilder sb =
new
StringBuilder(
" Hello "
);
sb.append(
" World "
);
System.out.println(sb.toString().trim( ));
|
StringBuilder不是一個線程安全的類,所以僅僅用做本地變量是沒有問題的。若是你但願用做實例變量,那麼能夠選擇線程安全的StringBuffer類。想知道字符串操做背後的原理嗎?能夠點擊這裏:String concatenation。