文章目录String、StringBuffer和StringBuilder三者的区别
一、String二、StringBuffer/StringBuilder
一、String
jdk1.8及以前String使用的是char数组,jdk1.9及以后使用的是byte数组;
jdk 1.8
jdk 1.9
无论是char[]数组还是byte[]数组,都用了final修饰。
因为数组一旦创建长度不可变,并且被final修饰的引用一旦指向某个对象之后,不能在指向其他对象,所以String是不可变的。
StringBuffer和StringBuilder内部实际上是一个byte[]数组或者char[]数组。
且数组没有被final修饰,StringBuffer/StringBuilder的初始化容量是16,当内存满了之后会进行扩容。
StringBuffer/StringBuilder适合于使用字符串进行频繁拼接操作。
区别:
StringBuffer的方法是同步的,synchronized修饰符进行修饰,证明Stringbuffer是线程安全的。
StringBuilder的底层代码中没有synchronized修饰符进行修饰,证明StringBuilder是线程不安全。
参考:
xlwu丶lz String、StringBuffer/StringBuilder 面试题



