zoukankan      html  css  js  c++  java
  • 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.速度比较

      

  • 相关阅读:
    kafka学习笔记:知识点整理
    ZooKeeper基本原理
    Channel详解
    redis十-对快照模式分析
    文字两行显示
    vue 脚手架创建新项目时报错 ERROR Failed to get response from http://registry.cnpmjs.org/vue-cli-version
    checkbox 点选后没有被选中,有点击事件,不显示小勾
    git 提示 没有操作权限
    HBuilder X 提示Setting.json格式语法错误
    格式化代码时提示错误
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/9621119.html
Copyright © 2011-2022 走看看