使用 java PrintWriter 打印字符串:串联还是循环?

Print Strings with java PrintWriter: Concatatenate or loop?

假设我想使用 PrintWriter.

在 java 中打印许多字符串,例如 "Hello" + var1 + "|" + var2

我的第一个选择是使用类似的东西:

Output.print("Hello" + var1 + "|" + var2);

其中 Output 是一个 PrintWriter 实例。在这种情况下 Java 必须连接所有项目(有些可能需要转换为 String),然后传递一个 String 参数来写入。

也许这样会更有效率:

void PrintMsg(PrintWriter Output, String... Msg) {
    for(String M : Msg) Output.write(M);  
}

在这种情况下,我会调用 PrintMsg(Output, "Hello", var1, "|", var2);。没有串联开销,但仅适用于 String 参数。如果 var1var2 不是 String,我将不得不调用:

PrintMsg(Output, "Hello", var1.toString(), "|", var2.toString());

或像这样重写PrintMsg

void PrintMsg(PrintWriter Output, Object... Msg) {
    for(Object M : Msg) Output.write(M.toString());  
}

我想知道您对执行此操作的最佳方式的看法。 提前致谢。

我不认为它会更有效率,因为有一个循环。就执行而言,它实际上可能更糟,因为它添加了直接打印没有的循环控制指令。

  1. 循环几乎肯定略微更好,因为进行字符串连接是额外的工作。
  2. 这是额外的工作,但如果我们只是谈论您问题中的那种事情,那就太少了 - 它只是一些字符串。在实际观察之前,您过于担心一个非常小的性能问题。如果您开始在循环中串联 至少 100 次迭代,您可能会担心。过早的优化是万恶之源。关于这一点,回答这个问题的理想方法是编写一个程序来测量所花费的时间。这很容易做到。
  3. M.toString()如果M == null会抛出异常。永远记得问问自己当某事 null 时会发生什么。您可能 想要 抛出异常,但我认为在这种情况下这有点混乱。假设您要将 null 转换为字符串 "null",请使用 String.valueOf(M).
  4. Java 方法和变量的命名约定是 camelCase,以小写字母开头,因此 printMsgoutputmmsg.
  5. 考虑 https://codereview.stackexchange.com/ 这类问题,因为它是专门为此量身定做的。