String,StringBuilder,StringBuffer,StringJoiner

  • Post author:
  • Post category:其他


java标准库提供了String,StringBuilder,StringBuffer,StringJoiner三个类

String类是不可变的对象,而其他三个类是可变的对象

首先,由于在String类中的定义存储字符串的char[]数组,它被final关键字修饰,所以说String类是不可变的

而其他三个字符串类中char[]数组都没有被定义为final.

其次,String类正因为不可变所以无法预分配缓冲区,只能根据最终结果来分配。而其他三类都已经预分配了缓冲区。

内存空间为16+字符串的长度

接着,String类在新增字符时,会创建新的临时对象。而其他三类正是因为可变的特性,所以可以直接修改char[]数组

所以不会创建新的临时对象来存值。

StringBuilder ,StringBuffer,StringJoiner ,三个类都继承自AbstractStringBuilder,实现的接口也一致。

StringBuilder的线程安全较差,但它的性能优越。而StringBuffer的性能较低,但它的线程安全较高,它的方法被

synchronized关键字修饰,所以较为安全。但现在很少使用到StringBuffer类,更多使用的是StringBuilder。

StringBuilder支持链式操作

StringJoiner类是一个可以高效拼接字符串的类。

// 代码实例

StringBuilder sbx = new StringBuilder(1024);

for (int i = 0; i < 1000; i++) {


sb.append(‘,’);

sb.append(i);

}

String s = sb.toString();

System.out.println(s);

StringBuilder链式操作

StringBuilder sb = new StringBuilder(1024);

sb.append(“Mr “)

.append(“Bob”)

.append(“!”)

.insert(0, “Hello, “);

System.out.println(sb.toString());


// StringBuilder与String类中不同的 方法

StringBuilder  sb = new StringBuilder

sb.append(b);// 在sb字符串的后边拼接一个字符串。

sb.charAt(index);// 输出字符串sb下标为index的值

sb.delete(start, end);// 删除字符串从start开始,从end结束不包含end

sb.indexOf(str);// 查找字符串str在sb字符串中的位置,返回下标值

sb.reverse();// 将字符串逆序

sb.replace(start, end, str); // 替换字符串中的值,从start开始在end结束不包含end,替换为str



版权声明:本文为qq_17845335原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。