String、StringBuilder、StringBuffer简单区别

String、StringBuffer和StringBuilder

同:

  1. 都用来封装字符串;
  2. 实现CharSequence接口

不同

  • string被final修饰,是不可变类,一旦赋值,不可改变;

    • StringBuffer和StringBuilder都继承自AbstractStringBuilder类,使用字符数组保存字符串,是可变类;
  • 创建对象初始化时,String可通过

    • String a = new String("abc");
    • String a = "abc";两种方法进行初始化
    • 而StringBuilder和StringBuffer只能通过new的方法来初始化
  • String字符串修改的方式是先创建一个StringBuffer,其次调用StringBuffer的append()方法,最后调用StringBuffer的toString()方法返回结果;

       String a = "abc";
            a =  a + "d";
            System.out.println(a);
    // a = "abcd";
    

    等同于

       StringBuffer xy = new StringBuffer("abc");
            xy.append("d");
            xy.toString();
            System.out.println(xy);
    // xy = "abcd";
    

    String字符串修改的过程要StringBuffer多几部操作,增加一些临时对象,从而导致代码的效率降低。

    StringBuffer和StringBuilder在修改字符串方面要比String的效率高

  • String类实现了equals()方法和hashCode()方法

    StringBuffer类没有实现equals()方法和hashCode()方法

  • StringBuffer和StringBuiloder都提供了一系列插入、追加、修改字符串字符序列等方法,用法基本相同,

    只是StringBuilder是线程不安全的,StringBuffer是线程安全的

    如果单线程使用字符串,则StringBuilder的效率高一些,但是当线程访问时,最好使用StringBuffer

在执行效率上,StringBuilder最高,StringBuffer次之,String最低。

如果要操作数量比较小,应优先使用String类;

如果是单线程操作大量数据,应优先使用StringBuilder;

如果是在多线程操作大量数据,应优先使StringBuffer类

上一篇:Java中final修饰符与类型检查


下一篇:【巩固Java基础】String、StringBuffer、StringBuilder