java +号字符串拼接原理解释以及StringBulider比较

来源:互联网 发布:淘宝网羽绒服女装 编辑:程序博客网 时间:2024/06/03 17:54

   首先平常在java中进行简单字符串拼接在一起最简单的方法就是 使用 "+",对与初学者是最简单的,但是随着写程序的增多,对代码的要求质量增高,发现使用 "+"的效率是非常低的,甚至我们应该不使用这种方式去拼接字符串,进行简单的例子进行说明一下。

首先准备一点测试代码:

public class Test {public static void main(String[] args) {String s = "";long starMs=System.currentTimeMillis();s =s+1;s= s+2;long endMs=System.currentTimeMillis();System.out.println(endMs-starMs);/*StringBuilder ss = new StringBuilder("");long starMs1=System.currentTimeMillis();ss.append(1);ss.append(2);long endMs1=System.currentTimeMillis();System.out.println(endMs1-starMs1);*/}}
简单运行一下之后使用javap进行查看编译之后的字节码源码,如图:

我们发现在编译的过程 "+" 被编译成了StringBuilde对象进行的操作,但是我们又发现我们拼接了2次就创建了2个StringBuilder对象,显然不是我们想要的结果,我们要的是只产生一个对象,而不是拼接几次创建几个对象。

我们运行第二段StringBuilder拼接的代码,结果如图:

结果如图所示,我们清楚的看到拼接的过程值产生了一个StringBuilder对象,正是我们想要的结果,这一点就比每次创建一个对象效率高了许多,我们加大拼接的次数会怎么样呢,我们测试一下.

代码简单修改:

public class Test {public static void main(String[] args) {String s = "";long starMs=System.currentTimeMillis();for(int i=0;i<10000;i++){s+=1;}long endMs=System.currentTimeMillis();System.out.println(endMs-starMs);StringBuilder ss = new StringBuilder("");long starMs1=System.currentTimeMillis();for(int i=0;i<10000;i++){ss.append(i);}long endMs1=System.currentTimeMillis();System.out.println(endMs1-starMs1);}}


很明显的是时间的长短,使用 "+"号,无疑创建了多个StringBuilder对象,执行完之后还要进行回收,无疑大大降低了效率。

堆的效果图:


以上只是个人观点。

0 0
原创粉丝点击