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.速度比较

      

  • 相关阅读:
    ch5 对链接应用样式
    ch4 圆角框
    ch4 背景图像基础
    ch8 CSS 3列(等高文本列)
    ch8 高度相等的列--CSS方法
    ch8 faux列
    java基础 (四)之集合
    java基础 (二)之HashMap,HashTable,ConcurrentHashMap区别
    java基础 (三)之ConcurrentHashMap(10)未完待续~~~
    java基础 (一)之HashMap(jdk1.7)
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/9621119.html
Copyright © 2011-2022 走看看