【问题标题】:Difference between formatted string and simple string格式化字符串和简单字符串的区别
【发布时间】:2014-12-07 07:37:07
【问题描述】:

这些代码块之间有什么区别——在性能或内存或其他方面有什么区别吗?

第一个代码是:

String name = "Jack";
String familyName = "Hunter";

String result = String.format("Your name is %s %s",name, familyName);

第二个代码是:

String name = "Jack";
String familyName = "Hunter";

String result = "Your name is " + name + " " + familyName;

感谢您的关注;-)

【问题讨论】:

标签: java string substring string-formatting stringbuilder


【解决方案1】:

它产生的输出没有区别。 result 变量在每种情况下都将具有相同的内容。

String.format() 的存在是为了让您可以进行更强大的格式化,包括指定浮点数的小数位数等。

我希望String.format() 版本相对较慢,仅仅是因为它更强大,并且必须在执行与第二个版本基本相同的操作之前检查格式字符串的内容。换句话说,它必须花费一些时间来解决您想要做什么,而在第二个版本中,编译器可以自己解决。

但是,实际上,出于性能原因在这里选择你的一个 sn-ps 看起来像是一种几乎永远不会得到回报的微优化。除非您对性能有明确的需求(即,它在一个对性能至关重要的东西的紧密循环中运行),否则您应该选择更具可读性的那个。

【讨论】:

  • 平心而论,第二段代码的性能应该会快很多。第二个代码将被更改为使用StringBuilder,因此性能相同。
  • @Obicere 你的意思是编译器将在内部使用StringBuilder 来一次连接在一起的Strings 链吗?这似乎是一个明显的优化,虽然我不知道编译器做了它。
  • 是的!这只是 Java 编译器的一大优点。
  • @Obicere 啊,很好。好的,我已删除该建议!
  • @ElyasHadizadeh 相反,编译器会将代码替换为 StringBuilder 等效代码。
猜你喜欢
  • 1970-01-01
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 2014-07-12
  • 2017-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多