关于String,StringBuffer,StringBuilder的区别

实际开发过程当中,一直使用String,对于StringBuffer,StringBuilder了解甚少,偶尔遇到这个问题,上网找了找,这里作下记录。java

String是final类型,不能被继承,一旦建立了,就不能被修改,而咱们使用的时候,好比String a = 'abc'; a='efg';实际上又建立了一个对象,这个对象的值为'efg',而后将这个值保存到以前a的对象中,正式由于多了这个步骤,在进行频繁赋值操做的时候才致使相对于StringBuffer效率更低。小程序

StringBuffer不是final类型的,因此是可变对象,它的创建是经过new StringBuffer(),对象创建以后,就会在内存中申请一块空间,初始值为null,赋值方式是经过.append("xxx")来实现。安全

StringBuilder跟StringBuffer的方法和操做基本上相同,惟一不一样的是StringBuffer是线程安全的,而StringBuilder是不安全的。app

摘选了网上的一段小程序:测试

public class Test {
public static void main(String args[]) {
String str = "abc";
StringBuffer sb = new StringBuffer("abc");
Runtime runtime = Runtime.getRuntime();
long start = System.currentTimeMillis();
long startFreememory = runtime.freeMemory();
for (int i = 0; i < 10000; i++) {
str += i;
//测试StringBuffer时候把注释打开
//sb.append(i);
}
long endFreememory = runtime.freeMemory();
long end = System.currentTimeMillis();
System.out.println("操做耗时:" + (end - start) + "ms," + "内存消耗:"
+ (startFreememory - endFreememory)/1024 + "KB");
}
}

测试结果:ui

使用String作10000次向一字符串后添加字符串spa

操做耗时:1666ms,内存消耗:1256KB.net


使用StringBuffer作10000次向一字符串后添加字符串线程

操做耗时:13ms,内存消耗:131KBcode

这个差异还真是挺大的。

关于这块内容,推荐下面的文章,讲的更为贴切

http://blog.csdn.net/rmn190/article/details/1492013

相关文章
相关标签/搜索