• Java基础(40)String、StringBuilder和StringBuffer的区别(TODO)


      一、String

      String实现了Serializable接口、Comparable<String>接口和CharSequence接口,并且使用final char value[]不可变字符数组保存字符串。

    public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
        /** The value is used for character storage. */
        private final char value[];
      ...
      }

      二、AbstractStringBuilder

      AbstractStringBuilder抽象类实现了Appendable接口、CharSequence接口,并且使用char[] value数组保存字符串。

    abstract class AbstractStringBuilder implements Appendable, CharSequence {
         * The value is used for character storage.
        char[] value;
      }

      三、StringBuilder

      StringBuilder继承了AbstractStringBuilder抽象类并且实现了Serializable接口、CharSequence接口。

    public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{}

      四、StringBuffer

      StringBuffer也继承了AbstractStringBuilder抽象类并且实现了Serializable接口、CharSequence接口

     public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence{}

      五、区别

      1.可变性  

      String不可变,因为是用final字符数组保存字符串,而StringBuilder和StringBuffer可变,因为是用普通字符数组保存字符串

      2.线程安全性

      StringBuilder和StringBuffer都继承了AbstractStringBuilder的方法,例如

      AbstractStringBuilder中的方法是:

        public int indexOf(String str, int fromIndex) {
            return String.indexOf(value, 0, count, str, fromIndex);
        }

      而StringBuilder中同样的方法表示为:

        @Override
        public int indexOf(String str, int fromIndex) {
            return super.indexOf(str, fromIndex);
        }

      而StringBuffer中同样的方法表示为:

        @Override
        public synchronized int indexOf(String str, int fromIndex) {
            return super.indexOf(str, fromIndex);
        }

      synchronized关键字修饰实例方法是作用于当前实例加锁,进入同步代码前要获得当前实例的锁。

      因此,StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。StringBuilder并没有对方法进行加同步锁,所以是非线程安全的。

      3.速度比较

      

  • 相关阅读:
    基于Python自动生成小学四则运算题目的命令行程序(软工第二次作业)
    第一次个人编程作业
    自我介绍+软工五问
    如何清理 Docker 占用的磁盘空间
    复审与事后分析
    团队作业5——测试与发布(Alpha版本)
    项目冲刺总结集合贴
    团队作业3:需求改进&系统设计
    团队作业2——需求规格说明书
    团队作业1——团队展示&选题
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/9621119.html
Copyright © 2020-2023  润新知