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()才是负责此任务的方法