java_String和StringBuffer区别分析
而这个stringbuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用stringbuffer。典型地,你可以使用stringbuffers来动态构造字符数据。
在java中有3个类来负责字符的操作。
1.character 是进行单个字符操作的,
2.string 对一串字符进行操作。不可变类。
3.stringbuffer 也是对一串字符进行操作,但是可变类。
string:
是对象不是原始类型.
为不可变对象,一旦被创建,就不能修改它的值.
对于已经存在的string对象的修改都是重新创建一个新的对象,然后把新的值保存进去.
string 是final类,即不能被继承.
stringbuffer:
是一个可变对象,当对他进行修改的时候不会像string那样重新建立对象
它只能通过构造函数来建立,
stringbuffer sb = new stringbuffer();
note:不能通过付值符号对他进行付值.
sb = "welcome to here!";//error
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null.向stringbuffer
中付值的时候可以通过它的append方法.
sb.append("hello");
以上为摘抄,网上常见的,以下为自己添加的见解:
地址不可更改,长度和内容可改。append()方法是追加,超过预留内存时,内存翻倍。
效率比较:stringbuffer比string高。因为stringbuffer有预留空间一直追加,只是对一个对象进行操作。而string是不能被修改的,只能重复的去创建对象来实现修改。——如果频繁的对字符串进行追加、替换、修改、插入、删除操作,最好使用stringbuffer。如果必须用string可以使用stringbuffer调用tostring()来转换成string即可。
public static void main(string[] args) {
string a="";
long begin=system.currenttimemillis();
for (int i = 0; i <10000; i++) {
a+=i;
}
long end=system.currenttimemillis();
system.out.println("string运行时间:"+(end-begin));
system.out.println("-----------------");
stringbuffer b=new stringbuffer();
long begin2=system.currenttimemillis();
for (int i = 0; i <10000; i++) {
b.append(i);
}
long end2=system.currenttimemillis();
system.out.println("stringbuffer运行时间:"+(end2-begin2));
}
我的机子比较垃圾,执行下来结果是
string运行时间:164593
-----------------
stringbuffer运行时间:31
而且string有contains方法,而stringbuffer没有。contains是包含的意思,这里可以在回忆下contains方法
public static void main(string[] args) {
string a="abc";
boolean str=a.contains("b");
system.out.println(str);
}
执行结果为
true