博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA的字符串拼接与性能
阅读量:6187 次
发布时间:2019-06-21

本文共 3037 字,大约阅读时间需要 10 分钟。

hot3.png

package javaBasic;import java.text.SimpleDateFormat;import java.util.Date;/** * JAVA的字符串拼接与性能 *  * @author markGao *  *         我们将执行20个拼接”*”50,000次的测试。下面是我们将使用到的拼接字符串的方法: */public class StringAndStrBuffAndStrBuilderCompare {    private static final int OUTER_ITERATION = 20;    private static final int INNER_ITERATION = 50000;    String addTestStr = "";    String concatTestStr = "";    StringBuffer concatTestSb = null;    StringBuilder concatTestSbu = null;    SimpleDateFormat sdFormat = new SimpleDateFormat("yyyyMMddhhmmssSSS");    StringAndStrBuffAndStrBuilderCompare() {    }    public void test() {        System.out.println("StringAddConcat " + sdFormat.format(new Date()));        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {            addTestStr = "";            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)                addTestStr += "*";        }        System.out.println("StringAddConcat " + sdFormat.format(new Date()));        System.out.println("StringConcat " + sdFormat.format(new Date()));        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {            concatTestStr = "";            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)                concatTestStr.concat("*");        }        System.out.println("StringConcat " + sdFormat.format(new Date()));        System.out.println("StringBufferConcat " + sdFormat.format(new Date()));        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {            concatTestSb = new StringBuffer();            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)                concatTestSb.append("*");        }        System.out.println("StringBufferConcat " + sdFormat.format(new Date()));        System.out                .println("StringBuilderConcat " + sdFormat.format(new Date()));        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {            concatTestSbu = new StringBuilder();            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)                concatTestSbu.append("*");        }        System.out                .println("StringBuilderConcat " + sdFormat.format(new Date()));    }    /**     * 这段代码是String.concat()的字节码,从这段代码中,我们可以清楚的看到,concat()方法使用了     * StringBuilder,concat()的性能应该和StringBuilder的一样好,但是由于额外的创建StringBuilder和     * 做.append(str).append(str).toString()的操作,使得concate的性能会受到一些影响,所以     * StringBuilder和String Cancate的时间是1.8和3.3。     *      * 因此,即时在做最简单的拼接时,如果我们不想创建StringBuffer或StringBuilder实例使,我们也因该使用concat。     * 但是对于大量的字符串拼接操作,我们就不应该使用concat(译者注:因     * 为测试代码功能上并不完全等价,更换后的测试代码concat的平均处理时间是1650.9毫秒。这个结果在原文的评论里面。),因为concat会降低     * 你程序的性能,消耗你的cpu。因此,在不考虑线程安全和同步的情况下,为了获得最高的性能,我们应尽量使用StringBuilder     *      * @param args     */    public static void main(String[] args) {        StringAndStrBuffAndStrBuilderCompare test = new StringAndStrBuffAndStrBuilderCompare();        test.test();    }}

转载于:https://my.oschina.net/u/1412027/blog/209171

你可能感兴趣的文章
[转载] 谈面试
查看>>
The difference between Severity and Priority
查看>>
js里实现给数字加三位一逗号间隔的两种方法
查看>>
DOS命令大全(经典收藏)
查看>>
Android数字选择器-NumberPicker
查看>>
zoj 3547 The Boss on Mars 第36届ACM大连预选赛I题
查看>>
javascript基础
查看>>
小学生四则运算应用软件(二)
查看>>
jQuery事件 JS选择器及相关
查看>>
golang 简单web服务
查看>>
shell(2):传入参数
查看>>
cobbler安装配置.基本全了多看help和docs
查看>>
C# 服务程序 - 调试服务
查看>>
LeetCode 627. Swap Salary
查看>>
CentOS 6.7安装Spark 1.5.2
查看>>
POJ 2449 Remmarguts' Date ——A*算法求k短路
查看>>
渗透测试之正则过滤
查看>>
PL/SQL — 函数
查看>>
托尔斯泰
查看>>
用最简单的例子实现jQuery图片即时上传
查看>>