字串物件是不可變的。String類中每一個看起來會修改String值得方法,實際上都是建立了一個全新的String物件,以包含修改後的字串內容。
用於String的「+」與「+=」是Java中僅有的兩個過載過的操作符,而java並不允許程式設計師過載任何操作符。
1.String物件是不可變的,你可以給一個String物件加任意多的別名.因爲String物件具有隻讀特性,所以指向它的任何參照都不可能改變它的值.
2.不可變性會帶來一定的效率問題,爲String物件過載的"+「操作符就是一個例子.
3. String的」+「操作經過編譯器優化後是利用的StringBuilder對字串進行拼接,效能不如直接使用StringBuilder拼接字串要好.
4. 多個String物件的」+"操作有可能會建立多個StringBuilder來拼接.
想列印物件的記憶體地址,在toString()方法中不能使用this關鍵字的返回字串,this關鍵字會轉換爲String物件,從而遞回呼叫toString()方法,會拋出異常.
解決方案: 使用super.toString()方法列印記憶體地址.這裏的super父類別是Object類.
String類的大多數方法,當需要改變字串的內容時,方法都返回一個新的String物件;如果內容沒有改變方法僅僅返回指向原字串物件的參照。
printf( ) 這和C語言中的一樣,使用%d、%f、%s等佔位符,但C語言中不能拼接字串,Java可以。
format()和printf( )一樣,printf()呼叫了format()方法
Scanner的構造器可以接受任何型別的輸入物件,包括File物件、InputStream、String或者Readable物件。Readable是Java SE5中新加入的一個介面,表示「具有read()方法的某種東西」。有了Scanner,所有的輸入、分詞以及翻譯的操作都隱藏在不同類型的next方法中。普通的next()方法返回下一個String。所有的基本型別(除char之外)都有對應的next方法,包括BigDecimal和BigInteger。所有的next方法,只有在找到一個完整的分詞之後纔會返回。Scanner還有相應的hasNext方法,用以判斷下一個輸入分詞是否所需的型別。