在Java中,在toString()方法中使用StringBuilder和String串联。
在Java中,在toString()方法中使用StringBuilder和String串联。
给定以下两个toString()
实现,哪一个更好:
public String toString(){ return "{a:"+ a + ", b:" + b + ", c: " + c +"}"; }
还是
public String toString(){ StringBuilder sb = new StringBuilder(100); return sb.append("{a:").append(a) .append(", b:").append(b) .append(", c:").append(c) .append("}") .toString(); }
?
更重要的是,虽然我们只有3个属性,但到了哪个点,你会从+
连接切换到StringBuilder
?
admin 更改状态以发布 2023年5月24日
关键在于您是否将单个串联全部放在一个地方或久而久之地累积。
对于您给出的示例,显式使用StringBuilder没有意义。(看一下您第一个示例的编译代码。)
但是,如果您正在构建一个字符串,例如在循环内部,请使用StringBuilder。
为了澄清,假设hugeArray包含数千个字符串,像这样的代码:
... String result = ""; for (String s : hugeArray) { result = result + s; }
与以下代码相比非常浪费时间和内存:
... StringBuilder sb = new StringBuilder(); for (String s : hugeArray) { sb.append(s); } String result = sb.toString();
Version 1更好,因为它更短,编译器实际上会将其转换为版本2 -没有任何性能差异。
更重要的是,因为我们只有3个属性,可能没有什么区别,但在什么时候切换从拼接到构建器更好呢?
在循环中拼接的点上 - 那通常是编译器无法自己替换StringBuilder
的时候。