`

Java字符串拼接效率分析

阅读更多

关于字符串处理在Java中通常有三个类进行处理:

String
StringBuilder
StringBuffer

这三个类进行字符串拼接,StringBuilder和StringBuffer都有同样的方式,都拥有append()方法.而StringBuilder和StringBuffer不同之处在于,在做一次append操作的时候,StringBuffer是线程安全的(仅仅是在一次操作)。StringBuffer的线程安全在于,做append()操作的时候,在方法前增加了synchronized操作。所以可以预见StringBuilder和StringBuffer在做append()的方法的时候StringBuilder更快(而在单线程下,这种差异不是特别大)。

 

String类进行字符串添加的方式有两种:

1.直接使用 “+” 进行拼接

2.使用concat进行拼接

 

下面就根据这四种操作进行测试。

测试用例:

 

    private static final int OUTER_ITERATION = 20;
    private static final int INNER_ITERATION = 50000;

    @Test
    public void testString() {
        String addTestStr = "";

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringAddConcat");

            addTestStr = "";

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                addTestStr += "*";

            stopWatch.stop();
        }
        System.out.println(addTestStr);
    }
    @Test
    public void testStringConcat() {
        String concatTestStr = "";

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringConcat");

            concatTestStr = "";

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                concatTestStr = concatTestStr.concat("*");

            stopWatch.stop();

        }
    }
    @Test
    public void testStringBuffer() {
        StringBuffer concatTestSb = null;

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringBufferConcat");

            concatTestSb = new StringBuffer();

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                concatTestSb.append("*");

            stopWatch.stop();

        }
    }
    @Test
    public void testStringBuilder() {

        StringBuilder concatTestSbu = null;

        for (int outerIndex = 0; outerIndex <= OUTER_ITERATION; outerIndex++) {

            StopWatch stopWatch = new LoggingStopWatch("StringBuilderConcat");

            concatTestSbu = new StringBuilder();

            for (int innerIndex = 0; innerIndex <= INNER_ITERATION; innerIndex++)

                concatTestSbu.append("*");

            stopWatch.stop();

        }
    }

 

 

分别运行得到的结果

StringBuilder > StringBuffer > concat> +

 

 

分享到:
评论

相关推荐

    JAVA的字符串拼接[参照].pdf

    在Java编程中,字符串拼接是一项常见的操作,特别是在构建动态字符串或者处理文本数据时。本文主要探讨了在Java中几种不同的字符串拼接方法的性能差异,包括使用操作符`+`、`String.concat()`、`StringBuffer.append...

    java中拼接字符串的5种方法效率对比

    今天,我们将通过测试和分析,比较 Java 中 5 种不同的字符串拼接方法的效率,并探究每种方法背后的实现原理。 第一种方法:使用 + 运算符 在 Java 中,我们可以使用 + 运算符来拼接字符串。这是最简单的方法,但其...

    JAVA字符串拼接常见方法汇总

    下面我们将详细介绍Java字符串拼接常见方法,并分析每种方法的优缺点。 一、使用“+”号连接字符串 使用“+”号连接字符串是Java中最简单的字符串拼接方法。例如: String str1 = "hello"; String str2 = "world...

    java字符串拼接与性能分析详解

    Java字符串拼接是编程中常见的操作,特别是在处理大量数据或者构建复杂的输出时。然而,不同的字符串拼接方式在性能上存在显著差异。本篇文章将深入探讨Java中的字符串拼接技术,以及它们对程序效率的影响。 首先,...

    ibatis拼接字符串

    在本篇文章中,我们将深入探讨如何使用 Java 编程语言结合 iBatis 框架进行 SQL 字符串的动态拼接。通过分析提供的代码片段,我们可以了解到在实际开发过程中,这种动态 SQL 的构建方式非常常见,尤其是在处理复杂的...

    java实验-字符串.docx

    而StringBuffer类是可变的,可以使用`append()`方法添加内容,而不必每次都创建新对象,因此在处理大量字符串拼接时,StringBuffer的效率更高。 总结来说,这个实验旨在帮助我们理解和掌握Java中字符串的基本操作,...

    for循环中如何正确使用字符串拼接

    在本文中,我们将探讨在`for`循环中如何正确使用字符串拼接,并分析几种常见方法的效率和底层实现。 首先,我们来看几种常用的字符串拼接方式: 1. `StringBuffer` 和 `StringBuilder`: 这两者都是用来处理可变...

    Java练习字符串课题的源码

    在Java编程语言中,字符串是极其重要且常用的数据类型,用于处理文本信息。"Java练习字符串课题的源码"这...通过分析和运行这些代码,你可以更深入地了解Java字符串操作的实际应用,并能解决实际项目中遇到的相关问题。

    Java源码海量字符串的快速操作.rar

    对于大量字符串拼接,使用`StringBuilder`或`StringBuffer`比多次使用`+`运算符更高效。两者的区别在于线程安全性:`StringBuilder`是非线程安全的,而`StringBuffer`是线程安全的,但在线程不安全的场景中,`...

    java中英文字符串处理.

    这是Java字符串安全和高效的基础。 1. **创建字符串**:你可以通过`new`关键字创建一个字符串,如`String str = new String("Hello, World!");`,或者直接用双引号创建,如`String str = "Java编程";`。 2. **子串...

    Java中关于字符串的若干问题分析.pdf

    ### Java中关于字符串的若干问题分析 #### 一、字符串的不同初始化方法及其影响 在Java中,字符串是一种特殊的数据类型,通常使用`String`类来表示。字符串的初始化方法多种多样,不同方法的选择会对程序的结果...

    关于字符串相等的比较

    - 当需要构建或修改字符串时,使用 `StringBuilder`(线程不安全)或 `StringBuffer`(线程安全)比拼接多个字符串更高效。 - 示例:使用 `StringBuilder` 构建最终的字符串后,再使用 `equals` 方法进行比较。 -...

    逐个替换字符串中的指定字符

    - **算法优化**:研究不同的字符串搜索算法,如KMP算法等,可以提高字符串处理的效率。 综上所述,通过理解字符串的基本概念、掌握逐个替换字符串中指定字符的具体实现方法以及注意相关的细节问题,我们可以有效地...

    work2_分割字符串_字符串处理_

    无论是进行数据解析、日志分析,还是构建复杂的文本处理算法,有效的字符串操作都能极大地提高代码的效率和可读性。因此,花时间学习和实践这些基本技能是每个程序员职业生涯中不可或缺的一部分。

    Java语言中字符串常量和变量的分析与比较.pdf

    Java语言中的字符串处理是...对于简单的字符串操作,`String`通常足够,而在循环或其他可能涉及大量字符串拼接的场景下,`StringBuilder`(在多线程环境下可以使用它的线程安全版本`StringBuffer`)能提供更好的性能。

    Java 实例 - 字符串优化源代码-详细教程.zip

    本教程将深入探讨Java字符串的优化策略,并通过实例源代码进行详细讲解,旨在帮助开发者提升程序运行效率。 1. 字符串常量池:在Java中,字符串常量池是一个内存区域,存储了所有字面量字符串(直接写在代码中的...

    字符串专题文档

    无论是编程语言、数据库操作还是数据分析,字符串都是我们日常工作中频繁打交道的数据类型。本专题文档旨在深入探讨字符串处理技术,旨在帮助开发者提升在这方面的专业能力。 首先,我们要理解字符串的本质。在...

    工具类_字符串处理

    例如,Java中的`java.util.StringBuilder`和`java.util.StringBuffer`就是两个常用的字符串操作工具类,它们提供了字符串拼接、替换、查找等多种功能,并且在多线程环境下,`StringBuffer`比`StringBuilder`更安全,...

    字符串转换工具

    它可能包含了优化的算法,能在处理大量字符串拼接时保持高效,避免了内存中的频繁拷贝和垃圾回收。此外,该工具可能还提供了批量替换功能,用户可以设定查找和替换规则,一次性处理整个文本文件或目录中的字符串,这...

Global site tag (gtag.js) - Google Analytics