什么是更好的
int i = 45;
String str = "dsfgdsgf"+i;
或者
int i = 45;
String str = new StringBuilder().append("dsfgdsgf").append(i).toString();
我在某处读到 StringBuilder 总是比连接字符串更好
什么是更好的
int i = 45;
String str = "dsfgdsgf"+i;
或者
int i = 45;
String str = new StringBuilder().append("dsfgdsgf").append(i).toString();
我在某处读到 StringBuilder 总是比连接字符串更好
性能没有差异,因为编译器会在内部将第一个版本转换为第二个版本。
由于第一个版本更具可读性,您应该在将固定数量的项目连接成字符串时使用它。
StringBuilder
当您多次附加到字符串时使用,例如在循环中。
在这两种情况下不应该有性能差异:prooflink。编译器隐式使用 StringBuilder 来连接字符串。
当然,在大多数情况下,1案例比2更具可读性。
在显式转换整数值方面也没有太大差异:
StringBuilder 转换使用AbstractStringBuilder#append(int)和使用String#valueOf(int)显式转换调用Integer#toString(int)内部。
如果您只是以已知格式连接值,请考虑:
int i = 45;
String str = String.format("%s%d", "dsfgdsgf", i);
Java 中的字符串是不可变的对象。这意味着通过编写String str = "dsfgdsgf"+i;
您实际上是在创建一个新的 String 对象并将旧对象留给垃圾收集器。
StringBuilder
另一方面是一个可变对象,因此该对象被修改。最好你应该使用StringBuilder.append()
或StringBuffer.append()
尽可能。
注意StringBuilder
不是synchronized
,StringBuffer
而是。
我们应该使用 StringBuilder,如果您通过附加、删除等多次修改字符串。在您的情况下,您正在使用 StringBuilder 并再次将其转换为 String。我认为您使用第二种方法不会节省太多,因为您是创建一个新的 StringBuilder 对象并附加并再次将其转换为 String
是的,StringBuilder 比连接字符串更好。当您使用以下代码行时String str = "dsfgdsgf"+i;
它在内部使用 StringBuilder。所以你只是通过直接使用 StringBuilder 来避免额外的步骤。
您的第二个选项更好,因为它不可能与字符串连接;因此,在进行连接之前,必须先将 String 转换为 StringBuilder,然后再将结果转换回 String。