面试连环炮系列(二十三): StringBuffer与StringBuild的区别

面试连环炮系列(二十三): StringBuffer与StringBuild的区别

  1. StringBuffer与StringBuild的区别
    频繁修改字符串时,建议使用StringBuffer和StringBuilder类。StringBuilder相较于StringBuffer有速度优势,要求线程安全的情况下,必须使用StringBuffer类。

  2. 为什么拼接String不推荐用加号
    String的值是不可变的,每次对String的操作都会生成新的String对象,不仅效率低下,而且消耗大量内存空间。

  3. 为什么String是不可变的

    1. String类内部所有的字段都是final修饰的。
    2. String类内部所有的字段都是私有的。
    3. String类不能够被继承和扩展。
  4. 有什么办法能够改变String
    可以通过反射来改变String

  5. String设计成不可变有什么好处

    1. 安全需要:在JDK中Java的类装载机制通过传递的参数(通常是类名)加载类,这些类名在类路径下。假设String是可变的,攻击者可能通过自定义类装载机制损害应用。
    2. 性能需要:不可变对象才可以创建常量池,提高JVM性能。
    3. 线程安全:当多线程访问时,不可变对象是线程安全的。

参考:
https://blog.csdn.net/u011702479/article/details/82262823
https://www.cnblogs.com/wuchanming/p/9201103.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注