java中的String与StringBuffer
来源:互联网 发布:长城网络还原大师2009 编辑:程序博客网 时间:2024/06/18 17:25
两者的区别
java中的String是final类,不能被继承。String是不可变对象,一旦创建就不能改变。对于已经存在String对象我们要去修改都是要创建一个新的对象,然后把新的值保存进去。
例如:String s1 = new String();
String s2 = new String();
s1 += s2;//该操作,先要新开辟一块存储区域,将s1和s2合并,再将这个地址传给s1引用。那么s1原来空间就被自动回收掉了。
java中的StringBuffer是一个可变对象,改变的时候,直接在原地址后面修改。StringBuffer只能通过构造函数来建立。
StringBuffer str = new StringBuffer();
str = "lsj";//错误,不能通过这种方式赋值
对象被建立以后,在内存中就会分配内存空间,并初始保存一个null,向StringBuffer中赋值的时候可以通过它的append方法.
str.append("seu");
StringBuffer s1 = new StringBuffer();
String s2 = new StringBuffer();
s1.append(s2);//该操作直接在s1的空间后面操作,不需要开辟额外的空间。
做下面一个实验
public class testString{public static void main(String args[]){String str = new String(); long start = System.currentTimeMillis();final int times = 1000;for(int i=0; i<times; ++i){str += "lsj";}long end = System.currentTimeMillis();System.out.println((end-start) + "ms");}}需要时间:15ms
而同样代码用StringBuffer做:
public class testString{public static void main(String args[]){StringBuffer str = new StringBuffer(); long start = System.currentTimeMillis();final int times = 1000;for(int i=0; i<times; ++i){str.append("lsj");}long end = System.currentTimeMillis();System.out.println((end-start) + "ms");}}时间几乎为0.
真正原因
其实,我们对
String s1 = new String();
String s2 = new String();
s1 += s2;
代码做连接操作的时候,系统其实按照下面代码来做的:
StringBuffer tempStr = new StringBuffer(s1);
tempStr.append(s2);
s1 = tempStr.toString();
这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣。并且由于String 对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值,这样原来的对象就没用了,就要被垃圾回收.这也是要影响性能的。
总结:如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更高
参考:http://blog.csdn.net/yirentianran/article/details/2871417
- java中的String与StringBuffer
- java中的String与StringBuffer
- Java中的基础----string与StringBuffer
- Java中的String、StringBuffer与StringBuilder
- Java-String与StringBuffer
- Java String与StringBuffer
- JAVA中的String和StringBuffer
- java中的String,StringBuffer,StringBuild
- Java中的String和StringBuffer
- java中的String,StringBuffer,StringBuilder
- java中的String,StringBuilder,StringBuffer
- java中的String StringBuilder StringBuffer
- java中的String,StringBuffer,StringBuilder
- Java中的String、StringBuilder、StringBuffer
- Java中的String,StringBuffer,StringBuilder
- java中的String、StringBuffer、StringBuilder
- Java之String与StringBuffer
- [Java]String、StringBuilder与StringBuffer
- C#扩展方法,非常重要
- bash快捷键
- note : Creates a hidden IE window
- 关于内存消耗问题
- Java关键字之native,strictfp,transient,volatile
- java中的String与StringBuffer
- Java网络编程从入门到精通(8):用getAddress方法获得IP地址
- 数论学习之起步篇(一)
- 阿里云服务使用感受
- POJ 1601 青蛙的约会
- 线段树 LA3938
- 【Android】使用Popwindow实现左侧弹出菜单层
- ubuntu 12.04 配置eclipse C++
- 【Android】还原“微信”apk中的“发现”和“我”两个模块