`
yuancihang
  • 浏览: 142370 次
  • 性别: 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/

相关推荐

Global site tag (gtag.js) - Google Analytics