StringBuffer 和 StringBuilder

StringBuffer 和 StringBuilder

1、共同点

1.1、实现接口

 

  • Serializable

  • Comparable<StringBuffer>

  • CharSequence

 

1.2、继承 java.lang.AbstractStringBuilder 类

该类是 java.lang 包私有的

2、StringBuffer

1、字符串( character strings ) 缓冲区 ( buffer ): string buffer 根据 Java 中类的命名规范为 StringBuffer

 

2、与 String 类的实例一样 StringBuffer 类的实例 也用于封装 字符串( character strings )

 

3、StringBuffer 类中定义了大量的用来操作 字符缓冲区的 方法 append / insert / replace / deleteCharAt /delete

 

4、与 String 类的实例 不可变不同 StringBuffer 类的实例是可变的 因此每次操作都会影响 StringBuffer 实例

 

 package CharSequence;
 
 /**
  * 1、字符串( character strings ) 缓冲区 ( buffer ): string buffer 根据 Java 中类的命名规范为 StringBuffer
  * 2、与 String 类的实例一样 StringBuffer 类的实例 也用于封装 字符串( character strings )
  * 3、StringBuffer 类中定义了大量的用来操作 字符缓冲区的 方法 append / insert / replace / deleteCharAt /delete
  * 4、与 String 类的实例 不可变不同 StringBuffer 类的实例是可变的 因此每次操作都会影响 StringBuffer 实例
  *
  * */
 
 public class StringBufferTest1 {
 
     public static void main(String[] args) {
 
         // 使用 StringBuffer 无参数构造创建一个 空的 字符串缓冲区
         StringBuffer buffer = new StringBuffer();
         System.out.println( "length : " + buffer.length() + " , capacity : " + buffer.capacity() + " , toString : " + buffer );
 
         buffer.append( false ); // 在 字符缓冲区中 追加内容
 
         System.out.println( "length : " + buffer.length() + " , capacity : " + buffer.capacity() + " , toString : " + buffer );
 
         buffer.insert( 0 , "hello," );
 
         System.out.println( "length : " + buffer.length() + " , capacity : " + buffer.capacity() + " , toString : " + buffer );
 
         buffer.replace( 5 , 6 , "," );
 
         System.out.println( "length : " + buffer.length() + " , capacity : " + buffer.capacity() + " , toString : " + buffer );
 
         int index = buffer.indexOf( "," );
 
         buffer.deleteCharAt( index );
 
         System.out.println( "length : " + buffer.length() + " , capacity : " + buffer.capacity() + " , toString : " + buffer );
 
         buffer.delete( 5 , 10 );
 
         System.out.println( "length : " + buffer.length() + " , capacity : " + buffer.capacity() + " , toString : " + buffer );
 
    }
 }
 

 

 

3、StringBuilder

 

1、StringBuilder 类的设计 与 StringBuffer 基本一致 ( 父类 、实现接口 、构造 、方法 )

 

2、StringBuilder 类中的 方法都没有 synchronized 修饰的, 而 StringBuffer 中所有 public 方法都是有 synchronized 修饰的

 

 

3、不论是 StringBuilder 还是 StringBuffer ,都可以使用 setLength 方法有效字符数 、通过 trimToSize 来调整容量

 

 

 package CharSequence;
 /**
  * 1、StringBuilder 类的设计 与 StringBuffer 基本一致 ( 父类 、实现接口 、构造 、方法 )
  * 2、StringBuilder 类中的 方法都没有 synchronized 修饰的,
  * 而 StringBuffer 中所有 public 方法都是有 synchronized 修饰的
  * 3、不论是 StringBuilder 还是 StringBuffer ,都可以使用 setLength 方法有效字符数 、通过 trimToSize 来调整容量
  */
 public class StringBuilderTest {
 
     public static void main(String[] args) {
 
         StringBuilder builder = new StringBuilder( "hello" );
         System.out.println( "length : " + builder.length() + " , capacity : " + builder.capacity() + " , toString : " + builder );
 
         builder.setLength( 0 ); // 设置 length 为 零 ( 有效字符数 为 零 )
 
         System.out.println( "length : " + builder.length() + " , capacity : " + builder.capacity() + " , toString : " + builder );
 
         builder.append( true );
 
         System.out.println( "length : " + builder.length() + " , capacity : " + builder.capacity() + " , toString : " + builder );
 
         builder.trimToSize();
 
         System.out.println( "length : " + builder.length() + " , capacity : " + builder.capacity() + " , toString : " + builder );
 
    }
 
 }
 

4、StringBuffer 和 StringBuilder 区别

 

  • StringBuffer 线程安全 所有 public 修饰的方法都有 synchronized 关键字修饰

  • StringBuilder 线程不安全 所有 的方法都没有 synchronized 关键字修饰

posted @ 2020-05-31 16:11  ZachYoung  阅读(299)  评论(0)    收藏  举报