(23) StringBuffer与StringBuild的区别
StringBuffer与StringBuild的区别
频繁修改字符串时,建议使用StringBuffer和StringBuilder类。StringBuilder相较于StringBuffer有速度优势,要求线程安全的情况下,必须使用StringBuffer类。为什么拼接String不推荐用加号
String的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低下,而且消耗大量内存空间。为什么String是不可变的
- String类内部所有的字段都是final修饰的。
- String类内部所有的字段都是私有的。
- String类不能够被继承和扩展。
有什么办法能够改变String
可以通过反射来改变StringString设计成不可变有什么好处
- 安全需要:在JDK中Java的类装载机制通过传递的参数(通常是类名)加载类,这些类名在类路径下。假设String是可变的,攻击者可能通过自定义类装载机制损害应用。
- 性能需要:不可变对象才可以创建常量池,提高JVM性能。
- 线程安全:当多线程访问时,不可变对象是线程安全的。
参考:
https://blog.csdn.net/u011702479/article/details/82262823
https://www.cnblogs.com/wuchanming/p/9201103.html