String类型的值不能进行修改,我们对其进行任何修改,其实都是需要重新创建一个string对象,这个就不符合享元模式,享元模式就是说尽量达到对象复用,减少对象的创建,比如说Integer这个包装类就引入了一个IntegerCache来缓存 -128~127的值,这样两个变量指向的就是同一个地址,超出这个范围的才在内存中创建
Stringbuffer和stringbuilder的区别在于stringbuffer是线程安全的,加了synchronized锁,二者的值都是可以修改,因为stringbuilder没有加锁,所以性能更高