1.了解一下StringBuffer和StringBudier是什么?
字符串缓冲区
2.工作原理:与预先在内存中申请一块空间,以容纳字符序列,如果预留的空间不够用,则进行自动扩容,以容纳更多的字符序列。
3.String和Stringbuffer、StringBuider的区别?
String是不可变的字符序列,存储在字符串常量池中
StringBuffer底层是一个char数组,但是该char数组是可变的,并且可以自动扩容。
StringBuffer类 继承AbstractStringBudier类
4.StringBuffer和StringBuider的默认容是“16”
5.如何优化StringBuffer和StringBuider呢?
最好在创建StringBuffer之前,预测StringBuffer的存储数量,然后在创建StringBuffer的时候采用指定初始化容量的方式创建StringBuffer,减少低层数组的拷贝,提高效率。
6.StringBuffer和StringBudier的区别?
前者是线程安全的,可以考虑在多线程的情况下使用。
后者是非线程安全的,在多线程情况下使用可能出现问题。
接下来举例说明StringBuffer的作用…
例题:将字符串数组"sport",“english”,“IT”,“Chinese"连接成 字符串"sport,english,IT,Chinese”。
程序一:
package comC;
/*
* 用“+”实现字符串的连接,为StringBuffer做反例,
* */
public class StringTest3 {
public static void main(String[] args) {
String[] str= {"sport","english","IT","Chinese"};
String s1=CombineString(str);
System.out.println(s1);
}
public static String CombineString(String[] str) {
String s2="";
for(int i=0;i<str.length;i++)
{
if(i==str.length-1) {
s2+=str[i];
}else {
s2+=str[i]+",";
}
}
return s2;
}
}
熟读完以上程序后,可以知道这是一段字符串合并的代码,操作主体是以“+”为连接符,进行字符串的拼接。在上一期博文中,有提到过
String a1="abc";
String a2="def";
String a3=a1+a2;//不推荐使用+进行字符串连接,浪费字符串常量池的空间
正是如此,虽然程序完成了字符串拼接的任务,但是程序的效率是不高的,常量池中的字符串太多,浪费有效的空间不建议在以后的编程过
程中使用"+"进行操作,应该使用StringBuffer类的append()方法,添加使用,接下来展示此方法。
程序二:
package comC;
/*
* StringBuffer和StringBuider
* */
public class StringTest2 {
public static void main(String[] args) {
String[] str= {"sport","english","IT","Chinese"};
StringBuffer s1 = CombineString(str);
System.out.println(s1);
}
public static StringBuffer CombineString(String[] str) {
//创建字符串缓冲区对象
StringBuffer sb=new StringBuffer();
//推荐频繁进行字符串拼接操作使用StringBuffer或StringBudier
for(int i=0;i<str.length;i++)
{
if(i==str.length-1) {
sb.append(str[i]);
}else {
sb.append(str[i]+",");
}
}
return sb;
}
}
因篇幅问题不能全部显示,请点此查看更多更全内容