3

简单的一行代码:

String thing = "Something";
thing += " something else" + " and more.";

IntelliJ IDEA 提供将此行更改为 4 种其他方式来实现相同的结果:

String.format()
StringBuilder.append()
java.text.MessageFormat.format()
Replace += with =

为什么?+= 有什么问题?任何人都可以解释一下吗?谢谢。

4

2 回答 2

2

在一般情况下,结果是不一样的。+运算符分配中间字符串,这需要额外的内存。

String thing = "Something";
thing += " something else" + " and more."; // two allocations: to compute string inside expression ```" something else" + " and more."```` and to execute ```+=```

通过使用StringBuilder,您不会分配中间结果,例如需要更少的内存。

在您使用短线且没有循环的情况下,预计不会有实际的性能提升。但是,使用循环,您会收到O(N^2)复杂性。请用解释的例子检查这个答案。

于 2020-03-04T11:31:14.543 回答
2

我假设你指的是这个:

在此处输入图像描述

如铅笔图标所示,这实际上不是您的代码的修复“问题”。对代码问题的修复用灯泡标识,例如不使用 的值thing

在此处输入图像描述

铅笔只是意味着“这是更改代码的快捷方式,因此您不必手动更改它”。将 a 更改a += ba = a + b通常并没有那么多工作,但其他事情,例如将 for-each 循环更改为常规 for 循环,则可以。

在此处输入图像描述

如果你突然想起你需要数组的索引来做某事,这可能会很有用。

于 2020-03-04T11:36:13.770 回答