Guava包含用于拆分和连接Strings的实用程序,但它需要实例化Splitter / Joiner对象才能执行此操作。这些是小对象,通常只包含要分割/连接的字符。保持对这些对象的引用以便重用它们是一个好主意,还是只在需要时创建它们并让它们被垃圾收集?
例如,我可以通过以下两种方式实现此方法:
String joinLines(List<String> lines) {
return Joiner.on("\n").join(lines);
}
OR
static final Joiner LINE_JOINER = Joiner.on("\n");
String joinLines(List<String> lines) {
return LINE_JOINER.join(lines);
}
我发现第一种方式更具可读性,但每次调用该方法时创建一个新的Joiner似乎都很浪费。
答案 0 :(得分:3)
老实说,这听起来像是对我的过早优化。我同意@Andy Turner,写下最容易理解和维护的内容。
如果您打算在少数地方使用Joiner.on("\n")
,请将其命名为常量;选择二。
如果您只打算在joinLines
方法中使用它,则常量似乎过于冗长;选择一个。
答案 1 :(得分:2)
这在很大程度上取决于您期望调用代码的频率以及您希望在CPU时间,内存消耗和可读性之间进行哪些权衡。由于Joiner
是一个很小的东西,它不会产生很大的不同:如果你使它成为一个常数,你可以节省(相当小的)分配它的成本并为每次调用GCing它,同时添加程序的(相当小的)内存消耗开销。
它还部分取决于您运行代码的平台:如果您在服务器上运行,通常您将拥有足够的内存,因此保持常量不会成为问题。另一方面,如果您在Android上运行,则内存受限,但 还希望避免不必要的分配,因为垃圾收集会更糟,对您的性能影响更大。< / p>
就个人而言,我倾向于分配一个常量,除非我知道它只会被使用一定次数,而不是在整个程序中反复使用。