一、String、StringBuffer、StringBuilder之间的区别(实现原理)

1.1 三者的异同 

  1. 首先说一下相同点:String、StringBuffer、StringBuilder都可以对字符串进行操作。
  2. 在字符串操作效率上看StringBuilder>StringBuffer>String
    效率的区别分析:
    a.String在设计的时候处于安全和性能的考虑,设置final修饰,长度不可变,每次在常量池新增一个字符串都是重新new一个对象,原来的对象没有引用后等待GC回收,所以效率比较慢。
    b.StringBuilder和StringBuffer都是可变长度的字符串,都继承了AbstractStringBuilder 。那么造成它们使用区别的原因分析源码即可知道了。StringBuffer的方法加了synchronized同步锁,代表线程安全。而StringBuilder则没有加synchronized 同步锁,线程是不安全的,但StringBuilder的效率要优于StringBuffer。

1.2 三者的使用总结

  •  如果要操作少量的数据使用 =String
  • 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder(线程非安全)
  • 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer(有buff就是安全,线程安全)

1.3 使用StringBuffer的建议

  •  StringBuffer的构造器会创建一个默认大小(通常是16)的字符数组。在使用中,如果超出这个大小,就会重新分配内存 ,创建一个更大的数组,并将原先的数组复制过来,再丢弃旧的数组。大多数情况下,你可以在创建StringBuffer的时候指定大小,这样就避免了在容量不够的时候自动增长,以提高性能。
  • 如 StringBuffer buffer= new StringBuffer(1000);
  /**
     * Constructs a string buffer with no characters in it and an
     * initial capacity of 16 characters.
     */
    public StringBuffer() {
        super(16);
    }

 

你可能感兴趣的:(面试相关)