字符串缓冲区
在学习String类时,API中说字符串缓冲区支持可变的字符串,什么是字符串缓冲区呢?接下来我们来研究下字符串缓冲区。
查阅StringBuffer的API,线程安全的可变字符序列。一个类似于 String 的字符串缓冲区,但不能修改。虽然在任意时间点上它都包含某种特定的字符序列,但通过某些方法调用可以改变该序列的长度和内容。
原来StringBuffer是个字符串的缓冲区,即就是它是一个容器,容器中可以装很多字符。并且能够对其中的字符进行各种操作。
StringBuffer基本使用
StringBuffer的特点:
1、是一个字符串缓冲区,其实就是一个容器。
2、长度是可变,任意类型都行。注意:是将任意数据都转成字符串进行存储。
3、容器对象提供很多对容器中数据的操作功能,比如:添加,删除,查找,修改。
4、所有的数据最终变成一个字符串。
创建一个字符串缓冲区对象。用于存储数据。
StringBuffer sb = new StringBuffer();
添加数据。不断的添加数据后,要对缓冲区的最后的数据进行操作,必须转成字符串才可以。
String str =sb.append(true).append("hehe").toString();
sb.append("haha"); //添加字符串
sb.insert(2, "it");//在指定位置插入
sb.delete(1, 4);//删除
sb.replace(1, 4, "cast");
StringBuffer的练习
缓冲区的应用:无论多少数据,什么类型都不重要,只要最终变成字符串就可以使用StringBuffer这个容器
练习:int[] arr ={34,12,89,68};将一个int[]中元素转成字符串 格式 [34,12,89,68]
public static String toString_2(int[]arr) {
StringBuffer sb = new StringBuffer();
sb.append("[");
for (int i = 0; i < arr.length;i++) {
if(i!=arr.length-1){
sb.append(arr[i]+",");
}else{
sb.append(arr[i]+"]");
}
}
return sb.toString();
}
StringBuffer和StringBuilder区别
查阅API发现还有一个StringBuilder类,它也是字符串缓冲区,它和StringBuffer的区别是什么呢?
阅读StringBuilder的API说明发现,一个可变的字符序列。此类提供一个与 StringBuffer 兼容的 API,但不保证同步。该类被设计用作 StringBuffer 的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍)。如果可能,建议优先采用该类,因为在大多数实现中,它比 StringBuffer 要快。
原来StringBuilder是线程不安全的,即就是在对容器操作的时候,不用去判断同步锁的问题,那么效率就高。并且API告诉我们优先采用StringBuilder类。