黑马程序员技术交流社区

标题: StrngBuffer与StringBuilder的区别? [打印本页]

作者: slience    时间: 2012-11-3 17:52
标题: StrngBuffer与StringBuilder的区别?
StrngBuffer与StringBuilder的区别?
作者: HeiMa-黄倲江    时间: 2012-11-3 18:17
StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象
它只能通过构造函数来建立,
StringBuffer sb = new StringBuffer();
可以通过它的append方法来赋值.
sb.append("hello");

StringBuilder:是一个可变对象,和StringBuffer相比,不是线程安全的,一般用在单个线程操作的时候
(这种情况很普遍,所以一般优先选用StringBuilder),速度比StringBuffe快很多。
字符串连接操作中StringBuffer的效率要比String高:

copy去下面的代码去运行一下;
       String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart1 = System.currentTimeMillis();
        String str = "";
        for (int i = 0; i < times; i++) {
            str += tempstr;
        }
        long lend1 = System.currentTimeMillis();
        long time = (lend1 - lstart1);
        System.out.println(time);
可惜我的计算机不是超级计算机,得到的结果每次不一定一样一般为 46687左右。
也就是46秒。
我们再看看以下代码
        String tempstr = "abcdefghijklmnopqrstuvwxyz";
        int times = 5000;
        long lstart2 = System.currentTimeMillis();
        StringBuffer sb = new StringBuffer();
        for (int i = 0; i < times; i++) {
            sb.append(tempstr);
        }
        long lend2 = System.currentTimeMillis();
        long time2 = (lend2 - lstart2);
        System.out.println(time2);
得到的结果为 16 有时还是 0
所以结论很明显,StringBuffer 的速度几乎是String 上万倍。当然这个数据不是很准确。因为循环的次数在100000次的时候,差异更大。不信你试试。

如果在程序中需要对字符串进行频繁的修改连接操作的话.使用StringBuffer性能会更好。







欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2