码迷,mamicode.com
首页 > 编程语言 > 详细

java 字符串拼接的单元测试

时间:2015-06-09 17:18:54      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:java   string   stringbuilder   

整体内容介绍

本文分为几个部分:
* String、StringBuffer、StringBuilder的对比
* 字符串拼接方式的对比
使用到的内容:
* Junit4单元测试
* slf4j的日志框架

String、StringBuffer、StringBuilder的对比

技术分享

对于这三者使用的场景做如下概括(参考:《编写搞质量代码:改善java程序的151个建议》):

  1. String:在字符串不经常变化的场景中可以使用String类,如:常量的声明、少量的变量运算等。

  2. StringBuffer:在频繁进行字符串的运算(拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,例如XML解析、HTTP参数解析和封装等。

  3. StringBuilder:在频繁进行字符串的运算(拼接、替换、删除等),并且运行在多线程的环境中,则可以考虑使用StringBuffer,如SQL语句的拼装、JSON封装等(貌似这两个我也是使用|StringBuffer)。

字符串拼接方式对比

package com.zy.util;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public class TestString {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    @Test
    public void testPlus() {
        String s = "";
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            s = s + String.valueOf(i);
        }
        long te = System.currentTimeMillis();
        //System.out.println("+ cost {} ms:"+(te-ts));
        logger.info("+ cost {} ms", te - ts);
    }
    @Test
    public void testConcat() {
        String s = "";
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            s = s.concat(String.valueOf(i));
        }
        long te = System.currentTimeMillis();
        //System.out.println("concat cost {} ms:"+(te-ts));
        logger.info("concat cost {} ms", te - ts);
    }

    @Test
    public void testStringBuffer() {
        StringBuffer sb = new StringBuffer();
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            sb.append(String.valueOf(i));
        }
        sb.toString();
        long te = System.currentTimeMillis();
        //System.out.println("StringBuffer cost {} ms:"+(te-ts));
        logger.info("StringBuffer cost {} ms", te - ts);
    }
    @Test
    public void testStringBuilder() {
        StringBuilder sb = new StringBuilder();
        long ts = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            sb.append(String.valueOf(i));
        }
        sb.toString();
        long te = System.currentTimeMillis();
        //System.out.println("StringBuilder cost {} ms:"+(te-ts));
        logger.info("StringBuilder cost {} ms", te - ts);
    }
}

上述程序结果如下:

2015-6-9 16:01:58 com.zy.util.TestString testPlus
信息: + cost 504 ms
2015-6-9 16:01:58 com.zy.util.TestString testConcat
信息: concat cost 196 ms
2015-6-9 16:01:58 com.zy.util.TestString testStringBuffer
信息: StringBuffer cost 2 ms
2015-6-9 16:01:58 com.zy.util.TestString testStringBuilder
信息: StringBuilder cost 2 ms

可以看出,+和concat的方式速度较慢,需要创建新串。
而StringBuffer和StringBuilder较快。

参考资源

不足地方

  • 使用javap进行反编译,具体再做分析

java 字符串拼接的单元测试

标签:java   string   stringbuilder   

原文地址:http://blog.csdn.net/zy416548283/article/details/46427969

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