`
yuancihang
  • 浏览: 144996 次
  • 性别: Icon_minigender_1
  • 来自: 洛阳
社区版块
存档分类
最新评论

java 字符串拼接方法性能大比拼

    博客分类:
  • java
 
阅读更多

由于在实际项目中经常会打log,这 就要用到字符串拼接, 本文测试了JAVA中的四种字符串拼接方法的性能。

 

1.使用“+”拼接字符串

	public static String f1(String p1, String p2, String p3){
		return "["+p1+"]["+p2+"]["+p3+"]";
	}

 2.使用StringBuilder拼接字符串

	public static String f2(String p1, String p2, String p3){
		StringBuilder sb = new StringBuilder();
		sb.append("[").append(p1).append("]");
		sb.append("[").append(p2).append("]");
		sb.append("[").append(p3).append("]");
		return sb.toString();
	}

 3.使用String.format拼接字符串

	public static String f3(String p1, String p2, String p3){
		return String.format("[%s][%s][%s]", p1, p2, p3);
	}

 4.使用MessageFormat.format拼接字符串

	public static String f4(String p1, String p2, String p3){
		return MessageFormat.format("[{0}][{1}][{2}]", p1, p2, p3);
	}

 测试:

	public static void main(String[] args) {
		int count = 100000;
		String bigStr = "2015-11-23 18:51:15,661 [nioEventLoopGroup-2-1] ERROR test_t1 [] - [test_t1][ChannelHandler_exceptionCaught]远程主机强迫关闭了一个现有的连接。";
		
		long start = System.currentTimeMillis();
		for(int i=0; i<count;i ++){
			f1("11111", "222222", bigStr);
		}
		long end = System.currentTimeMillis();
		System.err.println("f1 : " + (end - start));
		start = System.currentTimeMillis();
		for(int i=0; i<count;i ++){
			f2("11111", "222222", bigStr);
		}
		end = System.currentTimeMillis();
		System.err.println("f2 : " + (end - start));
		start = System.currentTimeMillis();
		for(int i=0; i<count;i ++){
			f3("11111", "222222", bigStr);
		}
		end = System.currentTimeMillis();
		System.err.println("f3 : " + (end - start));
		start = System.currentTimeMillis();
		for(int i=0; i<count;i ++){
			f4("11111", "222222", bigStr);
		}
		end = System.currentTimeMillis();
		System.err.println("f4 : " + (end - start));
	}

 测试结果:(单位毫秒)

f1 : 18

f2 : 40

f3 : 386

f4 : 134

 

结论:使用“+”拼接字符串性能最好,使用String.format性能最差,所以还是老老实实用“+”来拼字符串吧,虽然难看点

分享到:
评论
2 楼 widiots 2018-10-21  
遇上你这种代码,StringBuilder 比窦娥还冤。
你这测的是字符串拼接的效率,还是测定义并初始化字符串的效率?
1 楼 g_man1990 2017-07-11  
1和2应该是差不多的,还有append("[")可以改为append('[')会更快
,你可以把1反编译出来看看编译后的源码是什么

3和4觉得是String.format更快,如果是简单的字符串拼接还有更快的:org.slf4j.helpers.MessageFormatter.arrayFormat(String, Object[])

你可以试试这个来测试性能:http://irfen.me/java-jmh-simple-microbenchmark/

相关推荐

    +作为java中的拼接字符串的功能

    本文将深入探讨如何在Java中使用"+"运算符进行字符串拼接,并分析其性能影响及与`StringBuffer`、`StringBuilder`之间的区别。 #### 一、"+"运算符进行字符串拼接 在Java中,可以使用"+"运算符来连接两个或多个...

    实用小工具:Java实体类对比、Json对比、字符串动态拼接等功能

    标题中的“实用小工具:Java实体类对比、Json对比、字符串动态拼接等功能”涉及到的是在软件开发过程中常用的几个技术点,主要集中在Java后端和前端Vue.js的应用上。这里我们将详细探讨这些知识点: 1. **Java实体...

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

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

    关于JDK8中的字符串拼接示例详解

    在Java编程中,字符串拼接是一项常见的操作,但它的效率问题一直备受关注。在JDK 8中,字符串拼接的实现有了进一步的优化,这使得开发者在编写代码时有了更多的选择。本文将深入探讨JDK 8中的字符串拼接方式,以及其...

    javascript中字符串拼接详解

    需要注意的是,随着JavaScript引擎的不断优化,直接使用字符串拼接在现代浏览器中的性能可能已经得到了大幅度的提升,因此在实际开发中需要根据不同的运行环境和需求来选择最佳的字符串拼接方法。

    字符串逆向转换三种方法及性能

    递归法直观但效率较低,因为涉及到多次函数调用和字符串拼接,可能会导致较大的栈空间消耗。 性能对比: - **数组索引逆序法**:Python的切片操作非常高效,几乎与原始字符串长度成线性关系。C++的双指针技巧时间...

    Java占位符三种方案一起时间性能对比

    如果你只需要简单的字符串拼接,`StringBuilder` 是最优选择;对于更复杂的格式化任务,`String.format()` 或 `MessageFormat` 可能更适合。在性能至关重要的场景下,应优先考虑效率,但在某些情况下,可读性和代码...

    字符串连接方面测试时间

    值得注意的是,由于Java字符串是不可变的,每次使用“+”运算符连接字符串时,都会创建一个新的字符串对象,这不仅消耗CPU资源,还会导致更多的内存分配,特别是在循环中重复执行时,这种开销会累积得相当可观。...

    浅谈Java字符串

    性能对比中,`StringBuffer`和`StringBuilder`由于在原地修改字符串,避免了创建新对象,所以它们在处理大量字符串操作时比`String`更有效率。值得注意的是,JVM在某些情况下会优化连续的字符串连接操作,将其转化为...

    计算机软件-商业源码-14 连接字符串.zip

    字符串连接,也称为字符串拼接,是将两个或更多个字符串合并成一个新字符串的过程。在不同的编程语言中,如Java、C#、Python、JavaScript等,都有各自的方法来实现这一操作。例如: 1. **Java**: 在Java中,我们...

    C语言字符串我的理解.docx

    而在C语言中,字符串主要通过**字符数组**的形式来表达,并且没有像Java那样简便的字符串拼接方式(如 `str1 + str2`)。这一差异导致在使用C语言处理字符串时,开发者需要具备更加细致入微的控制能力。 #### 字符...

    TestStringAndStringBuilder.rar 字符串优化

    这种机制虽然确保了线程安全性,但在大量字符串拼接操作时,频繁的对象创建会导致性能下降,尤其是当循环中进行字符串连接时。 相对地,`StringBuilder`类是可变的,它提供了一个可变的字符序列。在`StringBuilder`...

    Java性能优化比较

    尽量使用StringBuilder或StringBuffer来拼接字符串,避免使用"+"操作符导致的大量字符串对象创建;选择适合场景的集合类,如ArrayList适用于随机访问,LinkedList适用于插入和删除操作。 其次,内存优化也是重要的...

    java中stringBuilder的用法.pdf

    5. StringBuilder与循环拼接性能对比 最后,文档给出了一个拼接字符串的性能测试案例,通过for循环将字符串拼接10000次,并使用`System.currentTimeMillis()`来计算整个过程的时间。这个例子展示了直接使用字符串...

    Java中String类(字符串操作)的10个常见问题和解决方法

    综上,Java中的String类提供了丰富的方法来处理字符串,但正确使用这些方法需要对Java内存模型、不可变对象和多线程安全等方面有深刻理解。这十个问题和解决方法,可以帮助开发者高效且正确地在Java中进行字符串操作...

    JAVA中String与StringBuffer的区别 自己的学习笔记总结

    - 当需要频繁地对字符串进行修改操作时(如字符串拼接),推荐使用 `StringBuffer`,因为它能够提供更好的性能。 - 如果只需要读取字符串且不打算对其进行修改,则使用 `String` 更为合适,因为它的不可变性使得它...

    Java语言中StringBuffer的用法

    - `StringBufferDemo_05.java`和`StringBufferDemo_10.java`可能展示了如何在循环中使用`StringBuffer`,这对于大量字符串拼接特别有用。 - 其他文件(如`StringBufferDemo_04.java`至`StringBufferDemo_08.java`)...

    java performance6

    - 未使用`StringBuilder`或`StringBuffer`类进行字符串拼接,这可能导致性能下降。 #### 第二种实现方式: ```java private String extractPingReportBody(String strPingReport) { int index0 = strPingReport....

    StringBuffer和String_区别

    2. **方法中的字符串拼接** ```java public String getString(String s1, String s2) { return s1 + s2; // 使用 String } public String getString(String s1, String s2) { return new StringBuffer()....

Global site tag (gtag.js) - Google Analytics