一、String、StringBuild、StringBuffer的区别
String | StringBuilder | StringBuffer | |
---|---|---|---|
区别 | 适用于少量的字符串操作的情况 | 适用于单线程下在字符缓冲区进行大量操作的情况 | 适用于多线程下在字符缓冲区进行大量操作的情况 |
字符串拼接效率最低 | 单线程安全 | 多线程安全,类方法中加入了Synchronized关键字 |
二、String为什么要设计成final?
- 性能优化(常量池存储,字符串不变保证了Hashcode唯一性)
- 安全性(考虑类加载的关系,多线程使用时,网络请求时url地址)
- 注意:这里的不可变指的是当你新建一个String对象并赋值,然后再修改其值,这时候修改的并不是原本内存地址对应空间的值,而是重建开辟一个内存空间存储其新修改的值,然后更新原本对象的引用地址