Java的String和StringBuffer的区别及应用场景

来源:互联网 发布:吉他谱制作软件中文版 编辑:程序博客网 时间:2024/04/27 16:25

一、String

String类不是一个原始类型,可以通过它的定义分析。

String类的定义:

private final char value[];

通过String类的定义我们可以看出一旦创建了这个对象,那它的值是不能改变的,对于已存在的String对象的修改实质上是创建一个新的对象,然后把新对象的值存进去。

二、StringBuffer

StringBuffer是一个可变对象,对它的值进行修改不会像String那样重新构造对象。

它只能用构造函数来创建 StringBuffer a = new StringBuffer();

再通过append给它赋值,a.append("Hello");

三、各自的应用场景

字符串连接操作中StringBuffer的效率要比String高: String str = new String("welcome to "); str += "here"; 的处理步骤实际上是通过建立一个StringBuffer,然后调用append(),最后 再将StringBuffer toSting(); 这样的话String的连接操作就比StringBuffer多出了一些附加操作,当然效率上要打折扣.
我们通过一个列子可以看出这个区别;
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");      }  }  

运行结果:

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

操作耗时:1872ms,内存消耗:1301KB

 

使用StringBuffer做10000次向一字符串后添加字符串

操作耗时:15ms,内存消耗:162KB


0 0