String,StringBuffer,StringBuilder区别

String,StringBuffer,StringBuilder

当对String类型的字符串进行修改时, 每次都相当于生成一个新的String对象,
举个例子
String a = “I”;
当我们想要实现“I am a student”时, 即 a = a + “am” + “a” + “student”;

系统会重新在堆内存中开辟三个位置分别用来存储"am"、“a”、“student”,然后再开辟一个位置来存放最后的结果,指针再指向这个堆内存地址, 再调用a的时候,,就是我们想要的结果,但是从这个例子中我们可以发现,系统一共开辟了五次堆内存空间, 只使用到了最后一个, 造成了很大的浪费,当内存中无引用对象多了后,,JVM的 GC(垃圾回收机制) 就会开始工作,会使的系统运行速度变慢。
为了避免这种问题,在jdk1.5版本中引入了 StringBuilder 以及 StringBuffer ,这两种类型的对象被修改时不会开辟新的空间(是可变的),因此不会造成上面的那种问题。
StringBuilder(线程不安全):所有的公开方法无