String/StringBuffer/StringBuilder的区别

首先最大的区别是String是不可变的,而StringBuffer和StringBuilder是可变的

可以在源码中看到,String类是被定义为final的,而StringBuffer和StringBulider不是
举个例子
String a="asd";//假设a指向了0x00001的地址
假如再 a="saf";//假设saf的地址是0x00002
此时,a是指向0x00002地址,而不是0x00001地址
a="saf"相当于新产生了一个String对象,而0x00001的“asd”对象还存在
而如果是用 StringBuilder或者StringBuffer进行上述操作,a还是指向0x00001地址,只是将其上的内容改了,并没有产生新的对象

其次String和StringBuffer是线程安全的,而StringBuilder是非线程安全的

String因为是定义为final的,所以是线程安全的,而StringBuffer加了同步锁,所以也是线程安全的。

最后String是java.lang.String而StringBuffer和StringBuilder都是继承自AbstractStringBuilder(是一个抽象类)

所以StringBuffer和StringBulider拥有共同的方法,比如append

你可能感兴趣的:(找工作)