【问题标题】:Difference between stringBuillder append(CONST) and append("new string")stringBuillder append(CONST) 和 append("new string") 的区别
【发布时间】:2021-06-10 20:00:22
【问题描述】:

我可以用下面的两个语句得到一些关于内存和运行时开销的具体解释吗?

  1. String CONST = "字符串常量"; StringBuilder sb1 = new StringBuilder();
    sb1.append(CONST);

  2. StringBuilder sb2 = new StringBuilder();
    sb2.append("字符串常量");

第二个是否创建字符串对象并添加到字符串池中? 是否有任何情况(也考虑许多字符串附加)我们可以证明一个比另一个更好?

【问题讨论】:

  • 它们是相同的。
  • 编写更易于阅读和理解的代码;并且任何字符串文字都被保留;这些在这里是相同的

标签: java string stringbuilder


【解决方案1】:

这两个版本在内存或运行时开销方面没有区别。

使用看起来更易读或更易于维护的那个。如果你在很多地方重复使用同一个字符串常量,这个常量很长,或者可能会改变,那么拉出一个常量可能是合适的。

【讨论】:

  • 追加一个字符串对象之前的一个问题会为“字符串常量”创建吗?如果我们有多个附加硬编码字符串,每次都会在附加之前创建新的字符串对象?
  • 没有。没有区别。在这两种情况下它都会变成一个常数。就像我说的:没有区别。甚至没有不重要的区别,零区别。
【解决方案2】:

就运行时开销而言,运行这两种方法的模拟会产生几乎相同的结果。

我的测试进行了 10,000,000,000 次迭代,运行时间为:

  • 方法 1 - 95109ms(平均约 9.5ns)
  • 方法 2 - 95002ms(平均约 9.5ns)

所以在性能上绝对没有明显差异。


因此,正如@LouisWasserman 在他们的回答中所说,只需使用保持代码干净易读的那个。

【讨论】:

    猜你喜欢
    • 2016-12-08
    • 2014-12-07
    • 2013-10-21
    • 2013-04-15
    • 2021-09-30
    • 2018-08-05
    • 2014-01-08
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多