首先,三者的源码都是使用数组来创建字符串,由于string底层的数组使用final关键字修饰,所以不可以改变。String不可以用于字符串的拼接:因为使用String创建的变量的内容不可以改变。stringbuffer是线程安全的,使用了锁,效率没有stringbuilder高,stringbuilder是线程不安全的。