Thinking in Java--字符串


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

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