1

什么是更好的

int i = 45;
String str = "dsfgdsgf"+i;

或者

int i = 45;
String str = new StringBuilder().append("dsfgdsgf").append(i).toString();

我在某处读到 StringBuilder 总是比连接字符串更好

4

7 回答 7

7

性能没有差异,因为编译器会在内部将第一个版本转换为第二个版本。

由于第一个版本更具可读性,您应该在将固定数量的项目连接成字符串时使用它。

StringBuilder当您多次附加到字符串时使用,例如在循环中。

于 2013-02-05T11:17:08.080 回答
4

在这两种情况下不应该有性能差异:prooflink。编译器隐式使用 StringBuilder 来连接字符串。

当然,在大多数情况下,1案例比2更具可读性。

在显式转换整数值方面也没有太大差异:

StringBuilder 转换使用AbstractStringBuilder#append(int)和使用String#valueOf(int)显式转换调用Integer#toString(int)内部。

于 2013-02-05T11:17:17.833 回答
2

如果您只是以已知格式连接值,请考虑:

int i = 45;
String str = String.format("%s%d", "dsfgdsgf", i);
于 2013-02-05T11:15:05.710 回答
2

Java 中的字符串是不可变的对象。这意味着通过编写String str = "dsfgdsgf"+i;您实际上是在创建一个新的 String 对象并将旧对象留给垃圾收集器。

StringBuilder另一方面是一个可变对象,因此该对象被修改。最好你应该使用StringBuilder.append()StringBuffer.append()尽可能。

注意StringBuilder不是synchronizedStringBuffer而是。

于 2013-02-05T11:24:20.580 回答
1

我们应该使用 StringBuilder,如果您通过附加、删除等多次修改字符串。在您的情况下,您正在使用 StringBuilder 并再次将其转换为 String。我认为您使用第二种方法不会节省太多,因为您是创建一个新的 StringBuilder 对象并附加并再次将其转换为 String

于 2013-02-05T11:15:01.727 回答
1

是的,StringBuilder 比连接字符串更好。当您使用以下代码行时String str = "dsfgdsgf"+i;

它在内部使用 StringBuilder。所以你只是通过直接使用 StringBuilder 来避免额外的步骤。

于 2013-02-05T11:15:42.247 回答
1

您的第二个选项更好,因为它不可能与字符串连接;因此,在进行连接之前,必须先将 String 转换为 StringBuilder,然后再将结果转换回 String。

于 2013-02-05T11:16:27.900 回答