java学习记录(五):关于String和StringBuffer的区别

本文是在以下这篇博文的的基础之上记性修改的:

http://blog.csdn.net/yirentianran/article/details/2871417

在java中有三个类来负责字符的操作:

1.Character进行单个字符的操作

2.String对一串字符进行操作。是不可变类。

3.StringBuffer也是对一串字符进行操作。但是是可变类。


String:

是不可变对象,一旦创建,就不能修改它的值

对于已经存在的String对象的修改都是重新创建一个新的对象,然后把新的值保存进去

String事故final类,不能被继承


StringBuffer:

是一个可变对象,当对它进行修改的时候不会像String那样重新创建对象,而是改变当前对象的内容

只能通过构造函数来建立:StringBuffer sb=new StringBuffer("");

不能通过赋值符号对它进行赋值:sb="welcome to here"; //error

对象被建立后,在内存中就会分配内存空间,并初试保存一个null

向StringBuffer中赋值的时候可以使用append()方法:    sb.append();


字符串连接效率中,StringBuffer要比String效率高

String str=new Stirng("Welcome ");

str+="here";

操作符“+”的处理过程实际上是通过建立一个StringBuffer,然后调用append(),最后调用StringBuffer的toString(),这样的话String的连接操作就比StirngBuffer的多出了一些附加操作,效率就降低了


由于String对象是不可变对象,每次操作Stirng对象都会重新建立新的对象来保存新的值,这样原来的对象就没用了,就要进行垃圾回收,这也是要影响性能的

以下比较String和StirngBuffer连接的效率

public class Test1 {
	public static void main(String[] args)
	{
		String tempstr="abcdefghijklmnopqrstuvwxyz";
		int  times=10000;
		long t1=System.currentTimeMillis();
		String str="";
		for(int i=0;i<times;i++)
			str=str+tempstr;
		long t2=System.currentTimeMillis();
		System.out.println("it costs:"+(t2-t1));
	}
}
使用String时,耗时基本上在3秒左右

public class Test1 {
	public static void main(String[] args)
	{
		String tempstr="abcdefghijklmnopqrstuvwxyz";
		int  times=10000;
		long t1=System.currentTimeMillis();
		StringBuffer sb=new StringBuffer();
		for(int i=0;i<times;i++)
			sb.append(tempstr);
		long t2=System.currentTimeMillis();
		System.out.println("it costs:"+(t2-t1));
		
	}
}
时间不稳定,维持在1秒或者2秒,总的来说效率要高于String。

所以,在程序中要对字符串进行频繁的修改连接操作的话,使用StirngBuffer的效率要高一些。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值