1、String类型
String类型是不可变的,因为它的类和属性都是final修饰的,就是在创建到销毁这个值都不可变,当你在对一个String字符串的值进行修改或重新赋值时,实际上已经不是原来的那个对象,而是重新创建了一个新的字符串对象,之前的没有被使用的话就会被当做垃圾回收,所以不仅效率低,更浪费内存空间,经常修改的字符串不建议使用String。
2、StringBuffer和StringBuilder(JDK1.5新增)相同点
StringBuffer和StringBuilder类型是一个字符序列可变的字符串,在操作时不会重新创建对象,可通过它提供的append,insert等一系列方法进行更改,当生成想要的字符串后可用toString方法转换成String类型,并且Buffer和Builder都有一定的缓冲区容量(初始化长度16的char[]数组),当值不超过容量时,不会分配新的内容,如若超出就会以当前容量上×2+2作为新的长度,比如:超过16后,就是16×2+2就是34。
3、不同点,区别
StringBuilder其实和StringBuffer基本一样,包括构造器和方法也基本相同,不同的在于StringBuffer是线程安全的,而StringBuilder线程不是安全的,所以buffer的安全性较高,效率低,而builder的安全性低,效率较高,注意点一目了然。