2019独角兽企业重金招聘Python工程师标准>>>

今天在项目里,用了下String.format来格式化字符串,这样写好处时代码量少了那么一点且比较直观,但想想,为啥很少地方有用,是不是性能不好?然后写了以下的代码,比较下常用拼接方法的性能比较。

public class Test{public static void main(String[] args){long st = 0l,et=0l;st= System.nanoTime();for(int i=0;i<100000;i++){Test.format("Tim",12);}et= System.nanoTime();System.out.println("format "+(et-st)/1000000+"ms");     st= System.nanoTime();for(int i=0;i<100000;i++){Test.plus("Tim",12);}et= System.nanoTime();System.out.println("plus "+(et-st)/1000000+"ms");    st= System.nanoTime();for(int i=0;i<100000;i++){Test.concat("Tim",12);}et= System.nanoTime();System.out.println("concat "+(et-st)/1000000+"ms");    st= System.nanoTime();for(int i=0;i<100000;i++){Test.builder("Tim",12);}et= System.nanoTime();System.out.println("builder "+(et-st)/1000000+"ms");  st= System.nanoTime();for(int i=0;i<100000;i++){Test.buffer("Tim",12);}et= System.nanoTime();System.out.println("buffer "+(et-st)/1000000+"ms");    }static String format(String name,int age){return String.format("我叫%s,今年%d岁",name,age);}static String plus(String name,int age){return "我叫"+name+",今年"+age+"岁";}static String concat(String name,int age){return "我叫".concat(name).concat(",今年").concat(String.valueOf(age)).concat("岁");}static String builder(String name,int age){StringBuilder sb=new StringBuilder();sb.append("我叫").append(name).append(",今年").append(age).append("岁");return sb.toString();}static String buffer(String name,int age){StringBuffer sb=new StringBuffer();sb.append("我叫").append(name).append(",今年").append(age).append("岁");return sb.toString();}
}

测试结果是:

format 331ms
plus 21ms
concat 18ms
builder 12ms
buffer 22ms

除了String.format外,其他都在意料之内。String.format的耗时也太超出想像了吧。

然后看了下实现的代码。

public Formatter format(Locale l, String format, Object ... args) {ensureOpen();// index of last argument referencedint last = -1;// last ordinary indexint lasto = -1;FormatString[] fsa = parse(format);for (int i = 0; i < fsa.length; i++) {FormatString fs = fsa[i];int index = fs.index();try {switch (index) {case -2:  // fixed string, "%n", or "%%"fs.print(null, l);break;case -1:  // relative indexif (last < 0 || (args != null && last > args.length - 1))throw new MissingFormatArgumentException(fs.toString());fs.print((args == null ? null : args[last]), l);break;case 0:  // ordinary indexlasto++;last = lasto;if (args != null && lasto > args.length - 1)throw new MissingFormatArgumentException(fs.toString());fs.print((args == null ? null : args[lasto]), l);break;default:  // explicit indexlast = index - 1;if (args != null && last > args.length - 1)throw new MissingFormatArgumentException(fs.toString());fs.print((args == null ? null : args[last]), l);break;}} catch (IOException x) {lastException = x;}}return this;}

看到这里感觉性能问题也没多大的意外了。

转载于:https://my.oschina.net/hand515/blog/100049

常见字符串拼接性能比较相关推荐

  1. golang 字符串拼接性能比较

    背景 最近在做一个服务发现/注册的agent, 各个服务需要通过这个agent来注册自己的服务,在完成 开发后,测试性能时发现性能达不到要求,通过pprof 来确认cpu主要耗费在gc上,分析结果主要 ...

  2. go拼接字符串不如php,golang 字符串拼接性能的对比分析

    背景 最近在做一个服务发现/注册的agent, 各个服务需要通过这个agent来注册自己的服务,在完成 开发后,测试性能时发现性能达不到要求,通过pprof 来确认cpu主要耗费在gc上,分析结果主要 ...

  3. C# 字符串拼接性能探索 c#中+、string.Concat、string.Format、StringBuilder.Append四种方式进行字符串拼接时的性能...

    本文通过ANTS Memory Profiler工具探索c#中+.string.Concat.string.Format.StringBuilder.Append四种方式进行字符串拼接时的性能. 本文 ...

  4. Go字符串拼接-源码+Benchmark

    想要写这个的目的在于,平时开发业务的时候会用到比较多的字符串拼接,刚好看了一些源码,就想说通过benchmark和底层的一些源码来看下常见字符串拼接的一些性能和原理. 常见的字符串拼接方式 + 最普通 ...

  5. 【Golang】高性能编程之字符串拼接

    go的拼接方式有很多种,这里讲常用的两种,一个常用的就像Python使用+,然后另一个是官方推荐的strings.Builder. +适用于普通的小字符串,因为在Go中,字符串是不可变类型,拼接是又开 ...

  6. java 字符串拼接_JAVA字符串拼接常见方法汇总

    字符串的拼接,常使用到的大概有4种方式: 1.直接使用"+"号 2.使用String的concat方法 3.使用StringBuilder的append方法 4.使用StringB ...

  7. Java 5种字符串拼接方式性能比较。

    最近写一个东东,可能会考虑到字符串拼接,想了几种方法,但对性能未知,于是用Junit写了个单元测试. 代码如下: import java.util.ArrayList; import java.uti ...

  8. .NET 6 使用 string.Create 提升字符串创建和拼接性能

    本文告诉大家,在 dotnet 6 或更高版本的 dotnet 里,如何使用 string.Create 提升字符串创建和拼接的性能,减少拼接字符串时,需要额外申请的内存,从而减少内存回收压力 本文也 ...

  9. [js] 字符串拼接有哪些方式?哪种性能好?

    [js] 字符串拼接有哪些方式?哪种性能好? 1.使用 + 号 2.es6模板字符串,以反引号( ` )标识 3.concat 4.数组方法join性能最好的是连接: + 继续补充:Array.pro ...

最新文章

  1. SAP MM 条件类型中PB00的‘Group Cond.‘标记的作用?
  2. 《黑客与画家》读后感:你对技术一无所知(一些金句)
  3. 《数据挖掘导论》实验课——实验一、数据处理之Numpy
  4. k8s label和label选择器
  5. iNeuOS工业互联网操作系统,智慧用电测控应用案例
  6. django-rest-framework第一次使用使用常见问题
  7. suse linux11 改ip,suse11如何修改hostname[Linux基础]
  8. python三大编程语言_程序员最需要的三种编程语言
  9. 算法3-------最长子序列和
  10. Java并发编程:03-多线程并发下载器, 支持断点下载(手写不限速的迷你版迅雷)
  11. EPP (Enhanced Parallel Port 增强型并口)
  12. 2017年10月份上海拍牌 最后20秒发生了什么!
  13. CF487E Tourists
  14. WebSocket对象的“readyState”属性记录连接过程中的状态值
  15. 华为交换机ARP防网关冲突
  16. python代码画乌龟_乌龟教你Python编程——“玫瑰花”是怎么画的!
  17. 区块链主要的核心内容
  18. Rosalind第五题:计算GC内容
  19. Adobe Illustrator CC 关于路径查找器的使用
  20. 我对计算机网络技术的理解,对计算机网络技术课程学习几点思考.doc

热门文章

  1. Elasticsearch Java API 6.2(java client)
  2. Mybatis基于SqlSession实现CRUD
  3. 从github上下载项目到eclipse
  4. jmeter 正则表达式
  5. 浅入浅出 Android 安全:第三章 Android 本地用户空间层安全
  6. 记一次TIME_WAIT网络故障
  7. wordpress主题wp-office2010初版
  8. Epson投影仪指示灯信息
  9. c++中几种常见的类型转换。int与string的转换,float与string的转换以及string和long类型之间的相互转换。to_string函数的实现和应用。...
  10. CloudBees发布“Jenkins X”:面向部署到Kubernetes中的现代云应用的CI/CD解决方案