码迷,mamicode.com
首页 > 其他好文 > 详细

字符串连接操作下的String和StringBuilder(一)

时间:2014-07-28 15:27:53      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   java   color   使用   os   2014   

看第一种情形:用String做字符串连接操作  连接一万次

public class Demo_01 {
    public static void main(String[] args) {
        String str = "123";
        String[] temp = new String[10000];
        for (int i = 0; i < temp.length; i++) {
            temp[i] = "456";
        }
        
        long begin = System.nanoTime()/1000000L;
        System.out.println(begin);
        for (int i = 0; i < temp.length; i++) {
            str += temp[i];
        }
        long end = System.nanoTime()/1000000L;
        System.out.println(end);
        System.out.println("连接操作消耗的时间:"+(end-begin)+"毫秒");
    }    
}

编译 执行 

bubuko.com,布布扣

 

 

做同样的字符串连接 也是连接一万次 这次使用StringBuilder

public class Demo {
    public static void main(String[] args) {
        StringBuilder sb = new StringBuilder();
        sb.append("123");
        String[] temp = new String[10000];
        for (int i = 0; i < temp.length; i++) {
            temp[i] = "456";
        }
        long begin = System.nanoTime()/1000000L;
        System.out.println(begin);
        for (int i = 0; i < temp.length; i++) {
            sb.append(temp[i]);
        }
        long end = System.nanoTime()/1000000L;
        System.out.println(end);
        System.out.println("连接操作消耗的时间:"+(end-begin)+"毫秒");
    }
}

编译 执行 

bubuko.com,布布扣

 

对比执行消耗的时间,String是479毫秒  StringBuilder是2毫秒 。(毫秒数仅作参考,不同Pc配置和OS环境因素下可能不同)

做同样的字符串连接操作 使用StringBuilder用时仅需使用String的1/240左右。

可见做大量字符串连接时用StringBuilder效率更高。

这学过Java的都知道啊,用你说。

 

可是为什么做大量字符串连接时 StringBuilder效率更高呢?

这是一个值得思考的问题。

 

嗯,我们先从编译器给我们反馈的信息看看。

对于用String进行连接,使用反汇编命令

bubuko.com,布布扣

得到如下信息

bubuko.com,布布扣

可以看到79 行 goto语句指向47行 这之间是循环体。

嗯?我明明是用的String啊,但是事实上是编译器擅作主张用了StringBuilder做连接操作。(StringBuilder效率高)

注意到54行 每次循环都会创建新的StringBuilder对象。

 

再看使用StringBuilder进行操作的情况:

bubuko.com,布布扣

反馈的信息

bubuko.com,布布扣

注意看78行的goto语句 指向59行  这之间也是循环体。

但是这次循环体中只有一个StringBuilder对象。编译器不会每次循环都创建新的StringBuilder对象。

所以相比使用String,在进行大量字符串连接时,StringBuilder效率更高。

 

下一节将从源码的角度出发,探讨StringBuilder效率更高的原因。

字符串连接操作下的String和StringBuilder(一),布布扣,bubuko.com

字符串连接操作下的String和StringBuilder(一)

标签:style   blog   http   java   color   使用   os   2014   

原文地址:http://www.cnblogs.com/sphere/p/3872918.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!