Java中字符串操作类String、StringBuffer、StringBuilder区别及性能对比测试

        java中对字符串的修改操作可以说是非常常见的,如果涉及到频繁的字符串修改操作,经常被建议采用StringBuilder和StringBuffer,肯定不用String类,原因在于 StringBuilder和StringBuffer不是final修饰的,它们是可变的,而String是不可变化的,因此每次对String对象进行修改操作都是通过拷贝复制String对象然后进行操作,性能上自然大打折扣。

   而StringBuilder和StringBuffer,它门都不是final的,运行频繁在原对象上进行修改。肯定有人会问,StringBuilder和StringBuffer有什么区别呢?就一句话,StringBuffer和StringBuilder的方法基本上是一样的,唯一的区别是StringBuffer是线程安全的,而StringBuilder不是。

   这里写一个程序分别用String、StringBuilder和StringBuffer,三种对象方法来对字符串添加的操作。看看分别耗时多少,上一段提到StringBuilder不是线程安全,StringBuffer是线程安全,这里我们暂时不管线程安全性。线程安全,意味着有代价,那就是要慢一些。下面的例子,可以证明三种类对字符串添加操作的速度快慢对比。

     代码部分:

public class StringEntities {
    private static final int COUNTS = 10000;


    /***
     * 测试String复制添加操作时间
     */
    public static void testString(){
        System.out.print("Start to test String -> ");
        long startTime = System.currentTimeMillis();
        String strResult = "";
        for(int i = 0; i< COUNTS; i++){
            strResult += i;
        }
        long endTime = System.currentTimeMillis();
        // 统计循环整个过程时间
        System.out.println("Total time of String operation i: "+ (endTime - startTime));
    }

    /**
     * 测试StringBuffer复制添加操作时间
     */
    public static void testStringBuffer(){
        System.out.print("Start to test StringBuffer -> ");
        long startTime = System.currentTimeMillis();
        StringBuffer strResult = new StringBuffer();
        for(int i = 0; i< COUNTS; i++){
            strResult.append(i);
        }
        long endTime = System.currentTimeMillis();
        // 统计循环整个过程时间
        System.out.println("Total time of StringBuffer operation is: "+ (endTime - startTime));
    }

    /**
     * 测试StringBuffer复制添加操作时间
     */
    public static void testStringBuilder(){
        System.out.print("Start to test StringBuilder -> ");
        long startTime = System.currentTimeMillis();
        StringBuilder strResult = new StringBuilder();
        for(int i = 0; i< COUNTS; i++){
            strResult.append(i);
        }
        long endTime = System.currentTimeMillis();
        // 统计循环整个过程时间
        System.out.println("Total time of StringBuilder operation is:: "+ (endTime - startTime));
    }
}
public class Main {

    public static void main(String[] args) {
        StringEntities.testString();
        StringEntities.testStringBuffer();
        StringEntities.testStringBuilder();

    }
}

    运行结果:

Start to test String -> Total time of String operation i: 1182
Start to test StringBuffer -> Total time of StringBuffer operation is: 19
Start to test StringBuilder -> Total time of StringBuilder operation is:: 3
       结论就是,从操作效率来看:StringBuilder > StringBuffer > String。 StringBuffer相对线程安全,因此在性能上相比StringBuilder有所微小损耗。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值