Java String常見面試題匯總


String類型的面試題
 
1.       String是最基本的數據類型嗎?
基本數據類型包括byte,int,char,long,float,double,boolean,short一共八個.
Java.lang.String類是final類型的,因此不能繼承,修改這個類.為了提高效率節省空間,應該用StringBuffer類.
 
2.       Strings=”Hello”;s=s+”world!”;這兩句代碼執行后,原始的String對象中的內容變沒?
沒有,因為String被設計成為不可變類,不能修改,繼承,代碼執行后,s所指向的對象”hello”沒有改變.不過s不指向s,而是指向了另外一個String.原來的對象還在內存中,只是不指向了.
們很容易導出另一個結論,如果經常對字符串進行各種各樣的修改,或者說,不可預見的修改,那么使用String來代表字符串的話會引起很大的內存開銷。因為 String對象建立之后不能再改變,所以對於每一個不同的字符串,都需要一個String對象來表示。這時,應該考慮使用StringBuffer類,它允許修改,而不是每個不同的字符串都要生成一個新的對象。並且,這兩種類的對象轉換十分容易。
 
3.       String是否可以被繼承?
不可以,因為String類似final類.
 
4.       Strings=new String(“xyz”);創建了幾個String Object?二者之間有什么區別?
兩個或一個,
”xyz”對應一個對象,這個對象放在字符串常量緩沖區,常量”xyz”不管出現多少遍,都是緩沖區中的那一個。New String每寫一遍,就創建一個新的對象,它一句那個常量”xyz”對象的內容來創建出一個新String對象。如果以前就用過’xyz’,這句代表就不會創建”xyz”自己了,直接從緩沖區拿。
 
5.       String和StringBuffer的區別是什么?
JAVA平台提供了兩個類:String和StringBuffer,它們可以儲存和操作字符串,即包含多個字符的字符數據。String類表示內容不可改變的字符串。
而StringBuffer類表示內容可以被修改的字符串。當你知道字符數據要改變的時候你就可以使用StringBuffer。典型地,你可以使用StringBuffers來動態構造字符數據。
另外,String實現了equals方法,new String(“abc”).equals(new String(“abc”)的結果為true,
而StringBuffer沒有實現equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的結果為false。
接着要舉一個具體的例子來說明,我們要把1到100的所有數字拼起來,組成一個串。
[java]  view plain  copy
  1. StringBuffer sbf =new StringBuffer();    
  2.   
  3. for(inti=0;i<100;i++)  
  4.   
  5. {  
  6.   
  7.          sbf.append(i);  
  8.   
  9. }  
 
上面的代碼效率很高,因為只創建了一個StringBuffer對象,而下面的代碼效率很低,因為創建了101個對象。
[java]  view plain  copy
  1. String str = newString();    
  2.   
  3. for(inti=0;i<100;i++)  
  4.   
  5. {  
  6.   
  7.          str = str + i;  
  8.   
  9. }  
 
在講兩者區別時,應把循環的次數搞成10000,然后用endTime-beginTime來比較兩者執行的時間差異,最后還要講講StringBuilder與StringBuffer的區別。
 
String覆蓋了equals方法和hashCode方法,而StringBuffer沒有覆蓋equals方法和hashCode方法,所以,將StringBuffer對象存儲進Java集合類中時會出現問題。
 
6.StringBuffer與StringBuilder的區別
StringBuffer和StringBuilder類都表示內容可以被修改的字符串,
StringBuilder是線程不安全的,運行效率高,
如果一個字符串變量是在方法里面定義,這種情況只可能有一個線程訪問它,不存在不安全的因素了,則用StringBuilder。
如果要在類里面定義成員變量,並且這個類的實例對象會在多線程環境下使用,那么最好用StringBuffer。
 
 
7、Java的String,StringBuffer,StringBuilder有什么區別?
那就是:String是不可變類(immutable),每次在String對象上的操作都會生成一個新的對象;StringBuffer和StringBuilder則允許在原來對象上進行操作,而不用每次增加對象;StringBuffer是線程安全的,但效率較低,而StringBuilder則不是效率最高。
這個答案我是很早都知道的,而且實際應用中也是這樣做的,經常變化的時候用StringBuilder或者StringBuffer。但是為什么是這樣的是最近才曉得的,而了解的方法非常簡單,就是閱讀jdk的源代碼:
String和StringBuffer,StringBuilder都是用字符數組來表示的。但是在String中這個字符數組是這樣定義的:
/** The value is used for character storage. */
private final char value[];
而在StringBuffer和StringBuilder中,這個字符數組都是繼承於java.lang.AbstractStringBuilder中的
 
/**
* The value is used for character storage.
*/
char value[];
這樣答案就很明顯了,原因就在這個final關鍵字上。
而同時通過源代碼可以發現StringBuffer的很多方法和屬性都有synchronized關鍵字修飾,而StringBuilder則沒有。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM