<Thinking in JAVA>筆記 字符串

1.字符串String對象是不可變的,每一個看起來會修改String的方法,實際上都是創建了一個新的String對象

2.重載+和StringBuilder:

   用重載+,實際上編譯器自動引入了StringBuilder,併爲每一次重載+做了一次append(),最後調用toString生成結果

   區別:雖然底層都是StringBuilder,但使用重載+時,每+一次,就會生成一個新的StringBuilder,而用StringBuilder的append()方法時,只會生成一個StringBuilder,所以在簡單的字符串操作時,可以信賴編譯器,否則就用StringBuilder

3.StringBuilder和StringBuffer

   StringBuffer是線程安全的,開銷會稍微大一點

4.無意識的遞歸:

public class Test {
     @Override     
     public String toString() {          
         return "Test [getClass()=" + getClass() + ", hashCode()=" + hashCode()                    + ", toString()=" + this.toString() + "]";     
     }     
     public static void main(String[] args) {          
         Test t = new Test();          
         System.out.println(t);     
     }
}



toString方法中的this.toString(),前後有個重載+操作,編譯器會將Test轉換成字符串,但巧的是,toString方法還是這個toString,以此遞歸下去,因此java.lang.StackOverflowError;

改成super.toString(),Object.toString()纔是負責此任務的方法





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