-2

可能重复:
Java 中 toString() 中的 StringBuilder 与字符串连接

在我的代码中,我使用如下所示的字符串连接。我正在做代码审查,所以我需要做性能检查。请任何人建议使用哪个更好。

quoteTreeMap.put(index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT + lastIndex,buffer.toString());

所以我们反复使用它

index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT + lastIndex

只有lastIndex这个值会改变,其余的都是一样的。

如何编写代码以提供更好的性能?我可以申报吗

index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT

这就像顶部一样

String one=""index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT"

我可以用它one+lastIndex吗?
参考:

StringBuffer buffer = new StringBuffer();
buffer.append(CommonUtil.QUOTE_TREE_GROSS_PREM);
buffer.append(CommonUtil.QUOTE_TREE_SPACE);
buffer.append(CommonUtil.QUOTE_TREE_EQUALS);
buffer.append(CommonUtil.QUOTE_TREE_SPACE);
buffer.append(chcCalBreakDownObj.getPremium().getGrossPrem());
quoteTreeMap.put(index + CommonUtil.QUOTE_TREE_DOT + fundIndex + CommonUtil.QUOTE_TREE_DOT + lastIndex, buffer.toString());
lastIndex++;
clearBuffer(buffer);

我正在做代码审查,所以我需要做性能检查。请任何人建议使用哪个更好。

4

6 回答 6

7

您应该使用,StringBuilder因为它不涉及String每次向其附加内容时都创建一个新的。

使用+运算符连接两个Strings 创建一个新String对象。

请记住,StringBuilder和之间的主要区别在于StringBuffer后者是同步的,因此通常比前者慢。

有兴趣的可以查看官方文档。

于 2012-12-21T10:15:28.357 回答
3

对我来说,这听起来像你过早地优化。

专注于编写易于理解和维护的代码。然后对其进行分析以发现瓶颈所在,然后才进行优化。

您发布的两个版本之间的性能差异可能无关紧要。

PS 无论如何,了解 和 之间的区别是值得StringBufferStringBuilder。请参阅StringBuffer 和 StringBuilder 类之间的区别

于 2012-12-21T10:20:35.460 回答
2

您可以使用StringBuilderStringBufferStringBuilder对于多线程是线程安全的,对于单线程StringBuffer很有用 t 提高了单线程的执行速度。

于 2012-12-21T10:45:57.143 回答
1

如果one每次迭代的结果都相同,请在循环之外预先生成它。然后你可以说one + lastIndex不用太担心效率低下;它至少与显式使用缓冲区一样高效(CPU 方面)。可能更是如此,因为您不是每次都从头开始重建字符串。它确实创建了一个半额外的字符串,但它要么是那个,要么是一个 StringBuilder,所以。

如果indexfundIndexCommonUtil.QUOTE_TREE_DOT将不断变化,您有两种选择:

  • 使用 StringBuilder 生成多行结果,或
  • 在一行中完成所有连接。即:没有String one = ...

几乎任何其他解决方案都会产生额外的字符串。

于 2012-12-21T10:51:58.900 回答
1

您可以使用StringBufferStringBuilder。不同之处在于 StringBuffer 是线程安全的。如果您仅在方法中使用它,您将选择 StringBuilder。

于 2012-12-21T10:18:50.780 回答
1

您应该首先分析代码并找到真正的性能猪。在显示的代码部分中使用 StringBuilder 可能会更快 - 但总体而言您获得了多少?

于 2012-12-21T10:21:49.537 回答