String、StringBuffer以及StringBuilder三者的区别

String 和 StringBuffer的区别:
二者都可以储存和操作字符串,既包含多个字符的字符数据。String类提供了数值不可改变的字符串;StringBuffer提供了可变的字符串序列。其中Stirng类中重写了equals方法和hashCode方法,而StringBuffer中未重写该方法,当使用equals方法进行判断时会存在差别。

new String("abc").equals(new String("abc"));----true
new StringBuffer("abc").equals(new String("abc"));----false

使用StringBuffer进行字符串的拼接速率更快,且是线程安全的(同步),执行比较代码:

public static void main(String[] args) {
    long start=System.currentTimeMillis();
    StringBuffer sb=new StringBuffer();
    for(int i=0;i<10000;i++){
      sb.append(i);
    }----耗时4s
//    String sb="";
//    for(int i=0;i<10000;i++){
//      sb=sb+i;
//    }----耗时286s
    long end=System.currentTimeMillis();
    System.out.println("拼接的字符串为:"+sb+";\n耗时:"+(end-start));
  }
  注解:由于StringBuffer只创建一个StringBuffer对象,而String执行一次拼接,
  创建一个String对象,所以相比之下,StringBuffer的速率更高。

StringBuilder和StringBuffer的区别:
StringBuffer是线程安全的可变字符序列(一个类似于String的字符串缓冲区,但不能修改),在任意时间点上它都包含某种特定的字符序列,但通过调用某些方法可以改变该序列的长度和内容,并且可以将改字符串缓冲序列用于多个线程(可以在必要时对这些方法进行同步,因此任意特定实例上的所有操作就好像是以串行顺序发生的,该顺序与所涉及的每个线程进行的方法调用顺序一致)。
StringBuilder是从jdk 5开始的,该类是为StringBuffer补充的一个单线程使用的等价类。与StringBuffer相比,由于该类不执行同步(用于多线程执行时是不安全的,当需要同步时,建议使用StringBuffer类),因此该类的执行效率更快(通常优先使用StringBuilder类)。

StringBuffer和StringBuilder上的主要操作是append和insert方法,可重载这些方法,以接受任意类型的数据。每个方法都能有效地将给定的数据转换成字符串,然后将该字符串的字符追加或插入到字符串缓冲区中。append 方法始终将这些字符添加到缓冲区的末端;而 insert 方法则在指定的点添加字符。
(三者区别更多详情请查看JDK API文档)
注:

文章全部内容是作者的学习经验总结,如果有不完美的地方,还请联系编者修改,亦或是你的疑惑编者在此处并未涉及到,也可以联系编者进行解答,完善。在此也欢迎更多的你加入我们。
加入我们,或是帮助我们改进,请扫:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_40298231/article/details/89377514