客观面试题--1. String、StringBuffer 与 StringBuilder 之间的区别?

  1. 首先说一下相同点:String、StringBuff 与 StringBuilder 都可以对字符串进行操作。

  2. 在字符串操作效率上看 StringBuilder >  StringBuffer  >  String

  3. 效率的区别分析:

    • String 在设计的时候处于安全和性能的考虑,设置为 final 修饰,长度不可变,每次在常量池新增一个字符串都是重新 new 一个对象,原来的对象没有引用后等待 GC 回收,所以效率比较慢。
    • StringBuilder 和 StringBuffer 都是可变长度的字符串,都继承了 AbstractStringBuilder 。那么造成它们使用区别的原因分析源码可以知道。StringBuffer 的方法都加了 synchronized 同步锁,代表线程安全。而StringBuilder 则没有加锁,所以 StirngBuilder 的效率要优于 StirngBuffer。
  4. 三者的使用总结:

    1. 如果要操作少量的数据用 = String
    2. 单线程操作字符串缓冲区 下操作大量数据 = StringBuilder(线程非安全)
    3. 多线程操作字符串缓冲区 下操作大量数据 = StringBuffer(有buff就是安全,这个是线程安全的)
  5. 使用 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);
        }

你可能感兴趣的:(客观面试题目汇总)