Java重修笔记 第三十三天 StringBuffer类、StringBuild类

发布于:2024-08-15 ⋅ 阅读:(29) ⋅ 点赞:(0)
  • StringBuffer类特性

1. 它父类的char value[]属性不是final的,不再存放在字符串常量池

2. 和String类相比,StringBuffer的更新不用每次都创建新的对象,只有空间不够的时候才会更新地址,效率比较高

  • StringBuild类特性

1. StringBuild类与StringBuffer类的API相互兼容,但是StringBuild类不是线程安全的,如果可能,优先采用效率较高的StringBuild类,例如在字符串缓冲区被单个线程使用的时候

  • StringBuffer和String的相互转换

1. String ---> StringBuffer

String str = "hello";
// String 转 StringBuffer
StringBuffer stringBuffer01 = new StringBuffer(str);
StringBuffer stringBuffer02 = new StringBuffer();
stringBuffer02.append(str);

2. StringBuffer ---> String

// StringBuffer 转 String
StringBuffer stringBuffer = new StringBuffer("123abc");
String s = stringBuffer.toString();
String s1 = new String(stringBuffer);

  • StringBuffer类的常用方法

1. public StringBuffer append(String str)

        将字符串添加进StringBuffer后面

2. public StringBuffer delete(int start, int end)

        删除索引包括start,到不包括end之间的字符串,左开右闭

3. public StringBuffer replace(int start, int end, String str) 

        将从包括start,到不包括end之间的字符串替换为str,左开右闭

4. public int indexOf(String str)

        返回该字符串第一次出现的索引

5. public StringBuffer insert(int dstOffset, CharSequence s)

        在索引dstOffset的位置后面插入s

  • String、StringBuild和StringBuffer的比较

1. String代表不可变字符序列,其内部的value[]字符数组是被final修饰的。 StringBuild和StringBuffer代表可变字符序列,其内部的value[]字符数组没有被final修饰,方法也一样。

2. StringBuild效率最高但线程不安全,StringBuffer效率较高线程安全,String效率最低复用率高。

  • String、StringBuild和StringBuffer的运用场景

1. 如果字符串有大量修改操作,用StringBuild和StringBuffer

2. 如果字符串有大量修改操作,并且单线程的情况用StringBuild

3. 如果字符串有大量修改操作,并且多线程的情况用StringBuffer

4. 如果字符串很少修改,并且被多个对象引用,用String,例如配置信息等