String,StringBuffer和StringBuilder
来源:互联网 发布:益玩网络 编辑:程序博客网 时间:2024/06/05 07:39
String,StringBuffer和StringBuilder是我们在Java中比较常见的、容易混用的字符串类型。查阅了一些资料,现在简单总结一下。
总的来说:
1、 String是字符串常量,StringBuffer和StringBuilder是字符串变量。
2、 执行速度:StringBuilder > StringBuffer > String。
3、 使用频率:String > StringBuilder > StringBuffer。
String是字符串常量,也就是不可改变的对象,那么可能会产生疑问,如以下代码:
String s = "abcd"; s = s+1; System.out.print(s);// 结果打印:abcd1
有的朋友可能觉得s明明发生了改变,事实上这是JVM解释代码时产生的一种欺骗,任何对String的改变都会引发新的String对象的生成,上面的代码实际上是产生了一个新的串“abcd1”赋给了s,而不是s原来的值“abcd”发生了改变。而StringBuffer与StringBuilder就不一样了,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象上操作的,这样就不会像String一样频繁的进行新对象的创建操作,当然速度就快了。
相信许多朋友先接触的应该是StringBuffer,那么既然有可变字符串对象StringBuffer了,为什么还要有StringBuilder呢?事实上,他们的原理和操作基本相同,区别在于StringBuffer支持并发操作,很多方法都是synchronized方法,是线性安全的,适合多线程中使用。StringBuilder不支持并发操作,线性不安全的,不适合多线程中使用(类似于集合类中HashTable和HashMap)。任何东西都具有两面性,StringBuffer既然支持多线程,就必然意味着在单线程下性能上有所牺牲,也正是因此一半情况下StringBuilder的执行速度比StringBuffer快。下面的例子可以在一定程度上反映出三者的执行速度:
public class UtilsDemo { public static voidmain(String args []){ StringBuffersbf = new StringBuffer(); longt1=System.currentTimeMillis(); for(int i=0;i<100000; i++){ sbf.append(i); } longtime=System.currentTimeMillis()-t1; System.out.println("StringBuffer时间:"+time+"毫秒"); StringBuildersbd = new StringBuilder(); long t2=System.currentTimeMillis(); for(int i=0;i<100000; i++){ sbd.append(i); } longtime2=System.currentTimeMillis()-t2; System.out.println("StringBuilder时间:"+time2+"毫秒"); String str =new String(); longt3=System.currentTimeMillis(); for(int i=0;i<100000; i++){ str= str+i; } longtime3=System.currentTimeMillis()-t3; System.out.println("String时间:"+time3+"毫秒"); }}
执行结果:
StringBuffer时间:12毫秒
StringBuilder时间:5毫秒
String时间:15581毫秒
经过上面的分析,三者的使用场景也就显而易见了:
1.如果要操作少量的数据用 = String
2.单线程操作字符串缓冲区下操作大量数据 = StringBuilder
3.多线程操作字符串缓冲区下操作大量数据 = StringBuffer
备注:网上类似的帖子很多,本文由多篇文章整理而来,就不注明出处了,请见谅
- String 、StringBuffer 和 StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String Stringbuffer和StringBuilder
- String ,StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String StringBuffer和StringBuilder
- String、StringBuffer和StringBuilder
- String和StringBuffer,StringBuilder
- String、StringBuffer和StringBuilder
- String, StringBuffer和 StringBuilder
- String、StringBuffer和StringBuilder
- String、StringBuilder和StringBuffer
- StringBuilder、StringBuffer和String:
- String、StringBuffer和StringBuilder
- Codeforces Round #426 (Div. 2)-The Bakery(线段树+DP)
- Android 中UIBlock的使用
- Linux学习笔记(8)
- SpringMVC
- 数字游戏
- String,StringBuffer和StringBuilder
- Android多线程之HandlerThread
- DoKuKIWI Windows安装说明
- How to operate/manage resources to meet certain objectives?
- Oracle初识笔记(二)
- js深入之继承
- 树链剖分模板题-SPOJ QTREEQuery on a tree
- Java中的八种基本数据类型所占字节的求法
- 解决angularjs图片加载失败