本文是在以下这篇博文的的基础之上记性修改的:
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的效率要高一些。