Stirng、StringBuffer、StringBuilder的区别浅谈

来源:互联网 发布:淘宝刷单群 编辑:程序博客网 时间:2024/05/20 12:46
Stirng、StringBuffer、StringBuilder的区别浅谈

1. String 类

String的值是不可变的,查看源码可以发现string类的属性为final。
String a = "data";
a = a+"data2"
以上代码通过字节码源文件可以看到工作原理
String a = "data";
StringBuilder sb = new StringBuilder();
sb .append(a).append("data");
a = sb.toString();
使用字符拼接明显可以看出创建了缓存对象,如果使用大量的字符拼接时,垃圾回收多次执行,降低了性能。

2. StringBuffer是可变类,和线程安全的字符串操作类,任何对它指向的字符串的操作都不会产生新的对象。 每个StringBuffer对象都有一定的缓冲区容量,

当字符串大小没有超过容量时,不会分配新的容量,当字符串大小超过容量时,会自动增加容量。
StringBuffer buf=new StringBuffer(); //分配长16字节的字符缓冲区
StringBuffer buf=new StringBuffer(512); //分配长512字节的字符缓冲区
StringBuffer buf=new StringBuffer("this is a test")//在缓冲区中存放了字符串,并在后面预留了16字节的空缓冲区。

3.StringBuilder

StringBuilderStringBuffer类功能基本相似,主要区别在于StringBuffer类的方法是多线程、安全的,而StringBuilder不是线程安全的,
相比而言,StringBuilder类会略微快一点。对于经常要改变值的字符串应该使用StringBuilderStringBuffer类。

4.线程安全

StringBuffer 线程安全
StringBuilder 线程不安全

5.速度

StringBuilder>StringBuffer>String 执行速度是相对的,不是绝对的

6.总结

(1)操作少量数据时使用 String
(2)单线程操作大量字符串数据时使用StringBuilder
(3)多线程操作大量字符串数据时使用StringBuffer

参考资料
字符串使用"+"连接的原理.
http://blog.csdn.net/gaoxuaiguoyi/article/details/50502625
字节码源文件查看
http://www.2cto.com/kf/201304/202018.html

* 以上纯属个人理解,有什么不足和错误欢迎指出。
1 0
原创粉丝点击