什么是更好
int i = 45;
String str = "dsfgdsgf"+i;
或
int i = 45;
String str = new StringBuilder().append("dsfgdsgf").append(i).toString();
我在某处读过StringBuilder总是比连接字符串
更好答案 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。