1.String:(只需要明白兩點)
①String對象是不可變的
②String類方法中所有對String對象的修改都是通過新建一個String對象來完成的
2.“+”重載與StringBuilder:
①用於String的“+”和"+="是Java中僅有的兩個重載過的操作符,而Java並不允許程序員重載任何操作符
②StringBuilder是個更高效的類,特別是體現在String對象的"+"操作上,因爲”+“操作是通過新建一個String對象來形成最終結果的。
而如果出現多次使用”+“操作的循環情形,將會產生多箇中間String對象,造成效率低下。幸運的是,StringBuilder的append方法能夠很好
的解決效率低下的問題。我們只需要在循環”+“操作前新建一個StringBuilder,之後的所有"+"操作通過append方法來代替,最後調用toString
方法就可以了。
【注意:append( a + ":" + b ),是個不好的操作,因爲你已經創建了一個StringBuilder對象處理括號內的字符串操作】
【拓展:StringBuilder還提供了豐富的方法:insert、replace、substring、reverse、(最常用的append、toString);
如果你已經知道字符串大概有多長,那預先制定StringBuilder的大小可以避免多次重新分配緩衝,一定程度上提高了效率】
3.無意識的遞歸(通過例子來說明):
import java.util.*; public class InfiniteRecursion { public String toString() { return " InfiniteRecursion address: " + this + "\n"; } public static void main( String[] args ) { List<InfiniteRecursion> v = new ArrayList<InfiniteRecursion>(); for ( int i = 0; i < 10; ++i ) v.add( new InfiniteRecursion() ); System.out.println( v ); } }在這個例子裏面,由於toString裏面的(String+this+String)(+this)已經調用了toString,如此遞歸調用下去
【拓展:想要打印出對象的內存地址,應該調用Object.toString()方法】
4.格式化字符串和格式化說明符
①format()與printf()是等價的,不過String.format()方法可以用於PrintStrrem、PrintWriter
②%s對應String
③【precision】應用於String是,它表示打印String是輸出字符的最大數量,應用於整數會觸發異常
④%b應用於其它各種類型時的情況:
對於boolean基本類型或者Boolean對象,只要參數不爲null,那轉換的結果永遠都是true,即使數字0的轉換結果依然爲true