`
m635674608
  • 浏览: 5003589 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

java中字符串连接的方法比较

    博客分类:
  • java
 
阅读更多

Java中字符串连接有好多种写法,比如要连接6个字符串,以下5种写法都是可以的,究竟哪种写法最简捷,哪种最高效呢。


    public static String concat1(String s1, String s2, String s3, String s4, String s5, String s6) {
        String result = "";
        result += s1;
        result += s2;
        result += s3;
        result += s4;
        result += s5;
        result += s6;
        return result;
    }

    public static String concat2(String s1, String s2, String s3, String s4, String s5, String s6) {
        StringBuffer result = new StringBuffer();
        result.append(s1);
        result.append(s2);
        result.append(s3);
        result.append(s4);
        result.append(s5);
        result.append(s6);
        return result.toString();
    }

    public static String concat3(String s1, String s2, String s3, String s4, String s5, String s6) {
        return new StringBuffer(s1.length() + s2.length() + s3.length() + s4.length() + s5.length() + s6.length())
                .append(s1).append(s2).append(s3).append(s4).append(s5).append(s6).toString();
    }

    public static String concat4(String s1, String s2, String s3, String s4, String s5, String s6) {
        return s1 + s2 + s3 + s4 + s5 + s6;
    }

    public static String concat5(String s1, String s2, String s3, String s4, String s5, String s6) {
        return new StringBuilder(s1.length() + s2.length() + s3.length() + s4.length() + s5.length() + s6.length())
                .append(s1).append(s2).append(s3).append(s4).append(s5).append(s6).toString();
    }

第一种写法是最土的写法,也最累赘,事实上看到这样的代码我都会有点头疼。看过《Effective Java》的朋友都知道用StringBuffer吧,用第二种写法的人应该也不少。第4种写法当然最简捷,最优美的了,就是不知道性能怎么样。Java 5里加了个StringBuilder类,与StringBuffer功能一样,就是没有同步,所有用StringBuilder代替 StringBuffer肯定对性能有好处,这样就产生的第5种写法。

还是做个测试有说服力。我的机器上同时装了JDK 5和JDK 6,两个都测了一下。执行每个函数10000000次(输入的每个参数都是"a"),各种写法用时如下,单位毫秒:

JDK 5:
concat1: 13776
concat2: 5081
concat3: 4944
concat4: 4202
concat5: 4047

JDK 6:
concat1: 11801
concat2: 3930
concat3: 3976
concat4: 3353
concat5: 3440

可 以看出第1种写法果然最慢,第二种写法由于用了StringBuffer,快了很多。奇怪的是第4种写法竟然也很快,比用StringBuffer还快, 怎么回事?其实如果你调试过字符串连接的执行过程就会知道当用第4种写法时Java会自动使用StringBuilder.append()函数来进行连 接。所以最简捷的第4种写法已经够快了。在JDK 5里,第5种写法最快,因为在创建StringBuilder的时候预先计算了总长度,消除了内存重分配。不过没有必要这么写,JDK 6里已经为第4种写法做了更好的优化,第5种写法反而慢了。

由此可见,采用最简单的第4种写法对于Java的实现来说优化的可能性越大。就像SQL一样,由于采用了陈述式的写法,优化器才有了优化的余地。想起了两句话:
1. 简单即美,谁都希望看到简洁明快的代码,不希望看到冗长乏味的代码
2. 性能优化是万恶之源

 

 

http://www.cnblogs.com/cowboybusy/articles/2718945.aspx

分享到:
评论

相关推荐

    java通用字符串连接

    在Java编程中,字符串连接是常见的操作,尤其是在处理集合数据如List、Set、Map和数组时。`java通用字符串连接`这个主题关注的是如何高效且灵活地将这些集合中的元素合并成一个单一的字符串,同时允许自定义连接分隔...

    java中常用字符串方法总结

    使用`+`运算符或`StringBuilder.append()`可以将多个字符串连接成一个。 8. **查找与替换** `indexOf(String str)`查找子字符串首次出现的位置,`lastIndexOf(String str)`找最后一次出现的位置。`replace(char ...

    JAVA的字符串拼接与性能

    如果你用”+”来连接固定长度的字符串,可能性能上会稍受影响,但是如果你是在 循环中来”+”多个串的话,性能将指数倍的下降。假设有一个字符串,我们将对这个字符串做大量循环拼接操作,使用”+”的话将得到最低的...

    java中字符串的操作汇总

    字符串连接 (`concat`) `String` 类提供了 `concat` 方法来实现字符串的连接操作。该方法接受一个 `String` 参数,并返回一个新的字符串,即原字符串与传入参数字符串的连接结果。 ```java public String concat...

    java 创建字符串类

    - **字符串连接**:可以使用`+`运算符或`StringBuilder`/`StringBuffer`类来连接字符串。但`+`运算符在处理大量字符串连接时效率较低,因为它会在每次连接时创建新的`String`对象。 2. **StringBuffer与...

    Java 字符串常用方法

    以下是一些Java `String`类中常用的方法,这些方法对于理解和操作字符串至关重要。 1. **创建字符串** - `new String()`: 使用此构造函数创建一个新的字符串对象,可以传入字符数组或另一个字符串作为参数。 - `...

    Java中字符串的连接和比较.pdf

    本文主要讲解了Java中字符串连接的不同方式以及比较字符串的多种方法。 首先,我们来看字符串的连接。Java提供了多种方式来连接字符串: 1. **使用`+`运算符**:这是最直观的方式,`+`运算符可以用于连接字符串,...

    JAVA连接字符串到配置文件

    在Java开发中,将连接字符串存放在配置文件中是一种常见的最佳实践,这有助于提升代码的可维护性和灵活性。连接字符串通常用于数据库连接、API调用或者其他需要网络通信的服务。本篇将详细介绍如何在Java中实现这一...

    Java中的字符串相关处理

    2. **字符串连接**:使用`+`运算符可以轻松地将两个字符串连接在一起。例如: ```java int age = 24; String s = "zhouyi is " + age + " old"; ``` 在这个例子中,整型变量`age`被自动转换为字符串并连接到...

    Java中字符串.pdf

    总结来说,Java中的字符串处理涉及到`String`和`StringBuffer`类的使用,以及它们提供的各种方法来操作字符串。理解字符串的不可变性和如何有效地使用这些方法,对于编写高效的Java代码至关重要。在实际编程中,根据...

    java中的字符串处理

    3. **字符串连接**:Java支持使用`+`运算符连接字符串,例如: ```java String s1 = "Hello"; String s2 = "World"; String s3 = s1 + " " + s2; // 结果为 "Hello World" ``` 4. **连接字符串与其它数据类型*...

    JAVA 字符串 操作

    在Java编程语言中,字符串...以上只是Java字符串操作的一小部分,实际开发中还有许多其他方法和特性,如国际化(I18N)、正则表达式等,都需要程序员灵活掌握。理解并熟练运用这些操作,能有效提高代码质量和效率。

    java中常用的字符串的截取方法

    Java 中常用的字符串截取方法 在 Java 编程语言中,字符串截取是非常重要的操作之一。字符串截取可以用于获取字符串中的部分内容,或者将字符串分割成多个部分。本文将详细介绍 Java 中常用的字符串截取方法,包括 ...

    java 各种数据库连接字符串

    下面将详细介绍Java连接各种数据库的连接字符串格式。 1. **Oracle** 数据库(thin模式) Oracle数据库的连接字符串通常采用以下格式: ```java Class.forName("oracle.jdbc.driver.OracleDriver").newInstance...

    java 给字符串编号

    3. **字符串连接**:在Java中,可以使用`+`操作符或者`StringBuilder.append()`方法将编号和字符连接起来。例如,`new StringBuilder().append(i).append(str.charAt(i))`可以在编号和字符之间添加连接。 4. **格式...

    JAVA 字符串应用笔记

    5. **字符串连接操作**: 在Java 5及以上版本,可以使用`+`操作符连接字符串,但在大量连接操作时,使用`StringBuilder`或`StringBuffer`更高效。 6. **常量池**: 字符串字面量会被放入常量池,如果两个字符串...

    java实验-字符串.docx

    在Java中,字符串比较有两种方式:使用"=="运算符和调用`equals()`方法。"=="运算符比较的是两个字符串对象的引用,看它们是否指向内存中的同一个位置。而`equals()`方法则比较字符串的内容是否相同。在这个实验中,...

    JAVA中字符-字符串常用的方法.doc

    例如,`equals()` 方法比较两个字符串,`concat()` 方法连接两个字符串,`indexOf()` 方法搜索字符串中指定字符的索引等。 在 Java 中,字符串是不可变的,意味着一旦创建了字符串就不能再修改它。这使得字符串在多...

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

    通过字节码分析,可以更深入地了解为什么某些方法在性能上有显著差异,例如`+`操作符实际上会触发字符串连接操作的隐式转换,而`StringBuffer`和`StringBuilder`则利用了可变对象的特性来避免这种额外的开销。...

Global site tag (gtag.js) - Google Analytics