如果面试官问到这个问题的时候,我们可以从下面几个方面进行回答:
- 可变性
● String是不可变的
● StringBuilder和StringBuffer是可变的 - 安全
● String是线程安全的(因为对象不可变,也就可以理解为常量)
● StringBuffer是线程安全的(因为对方法或者调用的方法加了同步锁)
● StringBuilder是线程不安全的 - 性能
● 每次对String进行改变,都会生成新的String对象,然后将指针指向新的String对象
● StringBuffer每次都会对StringBuffer对象本身进行操作,而不是生成新的对象并改变对象引用
● StringBuild也是对对象本身操作,不用的是性能更快,但也有线程不安全的风险
总结:
● 操作少量的数据: 适用 String
● 单线程操作字符串缓冲区下操作大量数据: 适用 StringBuilder
● 多线程操作字符串缓冲区下操作大量数据: 适用 StringBuffer
借鉴JavaGuide:https://javaguide.cn/