【问题标题】:String.valueOf(i) vs "" + i or i + ""String.valueOf(i) 与 "" + i 或 i + ""
【发布时间】:2011-10-31 03:41:07
【问题描述】:

为了方便,我通常使用"" + i。但是我自己比较一下性能,我认为String.valueOf(i) 会更快。这样对吗?我应该使用哪一个?

【问题讨论】:

  • 你为什么不自己测试一下?或调试以查看 "" + i 实际调用的内容。你会惊讶的;)
  • String.valueOf(i) 更好地传达了意图。无论如何,如果瓶颈真的存在,那么你真的必须重构代码
  • @Thomas Jungblut 我不知道如何测试性能时间。你能告诉我有什么不同吗?

标签: java string numbers integer numeric


【解决方案1】:

我认为您不会看到任何可衡量的差异。这似乎是通常所说的微(过早?)优化,很少是一个好主意。

选择您和您的同事认为最容易阅读的方法。

【讨论】:

  • 百万递归的情况下,小差会变大。所以我需要确切地知道。
  • @W.N. - 这是不正确的。您只需要知道答案如果这将被执行数百万次每秒 ... 并且您的应用程序 跑得快。分析将告诉您这个微小的代码片段是否会对性能产生重大影响。
【解决方案2】:

选择最适合阅读的内容。然后,在优化任何内容之前分析您的应用程序。

始终先配置文件(例如,VisualVM,因为您使用 Java 进行编码)。

有很多关于分析和优化的资源。我最近读到的好书是Step by Step Optimisation by Tony Albrecht

如果性能真的变得至关重要,请考虑切换到StringBuilder

编辑:

嗯,恕我直言,您的问题没有直接的答案。将String.valueOf(i)i + "" 的性能进行微基准测试几乎没有价值。真正的答案来自对您的应用程序进行基准测试:它本身的复杂性和内存访问模式决定了这一切。

这些不是我的想法,但我正在购买它们:stop programming like it's 1975big O notation needs an update

【讨论】:

  • 嘿,这是一个了不起的答案!不是直接回答我的问题,而是如何解决我的问题!
【解决方案3】:

我会用

Integer.toString( i )

如果 i 是一个整数,它可能会使用内部缓存以获得更好的性能。

虽然差别不大

【讨论】:

  • String#valueOf(int) == Integer.toString(int)
  • 如果他将来改成long或其他类型,那将是不必要的麻烦。
  • 没有内部缓存。这只是一个解析。你看到代码了吗?
猜你喜欢
  • 1970-01-01
  • 2016-08-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
  • 2017-08-20
相关资源
最近更新 更多