搜索
您的当前位置:首页正文

String、StringBuffer、StringBuider的作用和区别

来源:步旅网

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;
	}
}

因篇幅问题不能全部显示,请点此查看更多更全内容

Top