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

      

  • 相关阅读:
    HDU 3081 Marriage Match II
    HDU 4292 Food
    HDU 4322 Candy
    HDU 4183 Pahom on Water
    POJ 1966 Cable TV Network
    HDU 3605 Escape
    HDU 3338 Kakuro Extension
    HDU 3572 Task Schedule
    HDU 3998 Sequence
    Burning Midnight Oil
  • 原文地址:https://www.cnblogs.com/BigJunOba/p/9621119.html
Copyright © 2011-2022 走看看