我们正在构建一个大的文本块,并且正在使用StringBuilder的单个实例。我们将文本块分解为第(5)小节,并为每个分配了相应的方法。每个方法都接受输入变量并吐出文本。
将StringBuilder对象传递给每个方法,将数据附加到方法中并返回void或让每个方法返回一个我们附加到较小函数之外的对象的字符串是否更好?
这两种想法会有什么好处/缺点。
答案 0 :(得分:4)
我会传递StringBuilder
,并直接附加到它 - 假设您实际上不需要任何其他原因的中间字符串。
使用StringBuilder
的重点是避免创建超出需要的字符串。
返回字符串的主要优点是,如果您希望在不附加到StringBuilder
的情况下使用相同的代码,则更方便和惯用。但我假设这些实际上是从“构建文本”方法调用的私有方法,这使得它不再是一个问题。
Zim-Zam关于并行性的观点是一个有趣的观点,但我不担心,除非你实际计划将其并行化。
答案 1 :(得分:1)
传入StringBuilder的内存效率更高,因为不需要对要追加的字符串进行垃圾收集。返回字符串更适合并行化,因为字符串可以同时生成,然后按顺序附加。
答案 2 :(得分:1)
固定文字将被编译器检测到,所以这里的字符串最好使用
String s1="str1"+"str2"+"str3";
当你需要动态追加字符串时,首选StringBuilder
String s1="";
s1+="str1";
s1+="str2";
s1+="str3";
并使用StringBuilder的方法追加并最终转换为 的toString();
通过使用+稍后追加(编译器优化没有完成),创建了更多的对象
所以使用StringBilder