StringBuilder vs连接字符串和int(或任何其他数字)

时间:2013-02-05 11:11:04

标签: java

什么是更好

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

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

我在某处读过StringBuilder总是比连接字符串

更好

7 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:4)

两种情况都不应有性能差异:prooflink。编译器隐式使用StringBuilder来连接String。

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

显式转换整数值也没有太大区别:

StringBuilder使用AbstractStringBuilder#append(int)使用String#valueOf(int)并使用Integer#toString(int)内部调用{{3}}进行显式投射。

答案 2 :(得分:2)

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

int i = 45;
String str = String.format("%s%d", "dsfgdsgf", i);

答案 3 :(得分:2)

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

另一方面,

StringBuilder是一个可变对象,以便修改对象。您最好尽可能使用StringBuilder.append()StringBuffer.append()

请注意,StringBuilder不是synchronized,而StringBuffer是。{/ p>

答案 4 :(得分:1)

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

答案 5 :(得分:1)

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

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

答案 6 :(得分:1)

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