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()纔是負責此任務的方法