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的所有數字拼起來,組成一個串。

 

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

上面的代碼效率很高,因爲只創建了一個StringBuffer對象,而下面的代碼效率很低,因爲創建了101個對象。

 

 

 

 

String str = newString();  
 
for(inti=0;i<100;i++)
 
{
 
         str = str + i;
 
}
 

 

 

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

 

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

 

6.StringBuffer與StringBuilder的區別

StringBuffer和StringBuilder類都表示內容可以被修改的字符串,

StringBuilder是線程不安全的,運行效率高,

如果一個字符串變量是在方法裏面定義,這種情況只可能有一個線程訪問它,不存在不安全的因素了,則用StringBuilder。

如果要在類裏面定義成員變量,並且這個類的實例對象會在多線程環境下使用,那麼最好用StringBuffer。
--------------------- 
作者:u010693276 
來源:CSDN 
原文:https://blog.csdn.net/qingchenba/article/details/15733357 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章