String、StringBuffer、stringbuilder

一、相同点

        都可以存储和操作字符串,即包含多个字符的字符串数据。

二、String的使用

    ①、String类是不可变(fianl)的,对String类的任何改变,都是返回一个新的String类对象【属于数据类型包装类,值是不可以修改的】。

            String  str="abc";        String str1="def";【没有,则需要开辟新的内存空间】

            String  str="abc";         Srting str1="abc";【有,则将地址返回给对象即可】

            String   str="abc"         String str1 = new String("abc");【一定开辟了新的内存空间】

            内部工作流程:a.先定义一个名为str的对String类的对象引用变量:String  str

                                      b.在栈中查找有没有存放值为"abc"的地址,如果没有,则开辟一个存放字面值为"abc"的地址,接着创建一个新的String

                                          类的对象O,并将O的字符串值指向这个地址,而且在栈中这个地址旁边记下这个引用的对象O(需要创建新对象)。

                                         如果已经有了值为"abc"的地址,则查找对象O,并返回O的地址(不需要通过new()创建新对象)。

      ②、两种创建形式

            String str = "abc";   或者  String str =new String("abc");

      ③、使用场景

              当String变量需要经常变换其值时,会在堆中创建新的对象,而且栈中的数据不会被共享。这时候应该考虑StringBuffer类,以提高效率。

三、StringBuffer的使用

       ①、StringBuffer是字符串变量,它的对象是可以扩充和修改的【使用sppend()方法给字符串的缓冲区追加元素】。

②、两种创建形式

        StringBuffer sbf = new StringBuffer();       sbf.append("abc");

        StringBuffer sbf = new StringBuffer("abc");

        ③、使用场景

         当要求线程安全时候,使用StringBuffer。只追求效率时,使用StringBuilder。【StringBuilder效率最高】                String、StringBuffer、stringbuilder

   四、StringBuilder的使用

            ①、StringBuilder是一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步,用在字符串缓冲区被单个线程使用

                    的 时候(这种情况很普遍)。

            ②、创建方式       

            StringBuilder sbd = new StringBuilder();       sbd.append("abc");

            StringBuilder sbd = new StringBuilder("abc");

            ③、使用场景

                    单线程的时候被使用,其处理字符串的效率最高!【但是线程不安全的!】

                    String、StringBuffer、stringbuilder

五、补充

        a、线程安全:多线程访问时,采用了加锁机制,当一个线程访问该类的某个数据时,进行保护,其他线程不能进行访问直到该线程读取

                                完,其他线程才可使用。不会出现数据不一致或者数据污染。

        b、线程不安全:就是不提供数据访问保护,有可能出现多个线程先后更改数据造成所得到的数据是脏数据。

        String、StringBuffer、stringbuilder                      String、StringBuffer、stringbuilder

六、参考资料

       String:https://baike.baidu.com/item/string/5137266?fr=aladdin

       StringBuffer:https://baike.baidu.com/item/StringBuffer

       StringBuilder:https://baike.baidu.com/item/StringBuilder/2308464

       堆与栈:https://baike.baidu.com/item/%E5%A0%86%E6%A0%88/1682032

       多线程:https://baike.baidu.com/item/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1190404

      线程安全:https://baike.baidu.com/item/%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8/9747724?fr=aladdin