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