你知道String、StringBuilder、Stringbuffer的区别吗?我们知道,一个类被final修饰,那么这个类无法被继承,方法也不能被重写,属性也不能改变。看看这段代码:表面上s的值由abc变成了abc1,其实并不是这样,而是在进行+1的操作时,重新创建了一个新的String对象,并给它赋值为abc1.StringBuilder和StringBuffer这俩货同样用char数组存字符串,但并没有用final修饰,因此它们创建的内容的可变的,并不像String那样创建了一个新的对象。线程安全性String是常量,自然没有线程不安全的问题,但是StringBuilder和StringBuffer是变量,就需要考虑这个。我们查看StringBuilder的源码:再看看StringBuffer的:发现没有,StringBuffer的每个方法都加了synchronized同步锁,保证了线程安全,而StringBuilder没加。性能比较StringBuilder>StringBuffer>StringString作为常量,每次更改都创建新对象,性能最低;StringBuilder没有StringBuffer身上的锁,因此性能更好。

详解java中String、StringBuilder、StringBuffer的区别

详解java中String、StringBuilder、StringBuffer的区别