【问题标题】:Performance issue: "java.text.MessageFormat.format" vs "StringBuilder"性能问题:“java.text.MessageFormat.format”与“StringBuilder”
【发布时间】:2013-02-27 18:44:27
【问题描述】:

我想知道MessageFormatStringBuilder 类的比较。 举个例子,我有一个字符串。对于性能方面,哪一个是快速的: java.text.MessageFormat.formatStringBuilder("Test ").append("Hello ")?

String txt = java.text.MessageFormat.format("Test {0}"," Hello") 
String txt1=   new StringBuilder("Test ").append("Hello ")

我只想知道在最佳实践或性能方面使用哪一个

【问题讨论】:

  • 为什么不自己进行速度测试?我的猜测:StringBuilder 更快。
  • StringBuilder 最快,但可能无关紧要。简单的 toString 可能会更昂贵。
  • 你自己试过了吗? #OneOfTheMostCommonCommentsInSO
  • 如果您能测量任何实际应用中的差异,我会感到惊讶。网络和磁盘速度将占主导地位。
  • MessageFormat 更具可读性。用 StringBuilder 连接字符串容易出错,可读性较差。

标签: java performance-testing


【解决方案1】:

自己试试吧:

long start = System.nanoTime();
String txt = MessageFormat.format("Test {0}"," Hello");
System.out.println("MessageFormat: " + (System.nanoTime() - start) + " ns");

start = System.nanoTime();
String txt1 = new StringBuilder("Test ").append("Hello").toString();
System.out.println("StringBuilder: " + (System.nanoTime() - start) + " ns");

输出:

消息格式:1125974 ns

StringBuilder:16705 ns

结论:

StringBuilder 工作得更快,因为它只是向现有数组添加了一些字符。

【讨论】:

  • 简单易懂。谢谢。
  • 这个不好比较,因为每次都要解析消息格式。与 RegExp Pattern 类一样,预期用途是设置一次模式/格式模板,然后多次使用而不重新解析它。
  • 我测量 String.format 大约需要预先解析的 messageFormat.format() 的 4 倍
【解决方案2】:

StringBuilder 只将文本附加到动态缓冲区,而MessageFormat 必须在附加数据之前解析给定格式,那么StringBuilderMessageFormat 更有效。

【讨论】:

  • 谢谢..我也认为 StringBuilder 比 Message.format 更快
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2017-12-23
相关资源
最近更新 更多