使用 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
参数。如果 var1
、var2
不是 String
,我将不得不调用:
PrintMsg(Output, "Hello", var1.toString(), "|", var2.toString());
或像这样重写PrintMsg
:
void PrintMsg(PrintWriter Output, Object... Msg) {
for(Object M : Msg) Output.write(M.toString());
}
我想知道您对执行此操作的最佳方式的看法。
提前致谢。
我不认为它会更有效率,因为有一个循环。就执行而言,它实际上可能更糟,因为它添加了直接打印没有的循环控制指令。
- 循环几乎肯定略微更好,因为进行字符串连接是额外的工作。
- 这是额外的工作,但如果我们只是谈论您问题中的那种事情,那就太少了 - 它只是一些字符串。在实际观察之前,您过于担心一个非常小的性能问题。如果您开始在循环中串联 至少 100 次迭代,您可能会担心。过早的优化是万恶之源。关于这一点,回答这个问题的理想方法是编写一个程序来测量所花费的时间。这很容易做到。
M.toString()
如果M == null
会抛出异常。永远记得问问自己当某事 null
时会发生什么。您可能 想要 抛出异常,但我认为在这种情况下这有点混乱。假设您要将 null
转换为字符串 "null"
,请使用 String.valueOf(M)
.
- Java 方法和变量的命名约定是
camelCase
,以小写字母开头,因此 printMsg
、output
、m
、msg
.
- 考虑 https://codereview.stackexchange.com/ 这类问题,因为它是专门为此量身定做的。
假设我想使用 PrintWriter
.
"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
参数。如果 var1
、var2
不是 String
,我将不得不调用:
PrintMsg(Output, "Hello", var1.toString(), "|", var2.toString());
或像这样重写PrintMsg
:
void PrintMsg(PrintWriter Output, Object... Msg) {
for(Object M : Msg) Output.write(M.toString());
}
我想知道您对执行此操作的最佳方式的看法。 提前致谢。
我不认为它会更有效率,因为有一个循环。就执行而言,它实际上可能更糟,因为它添加了直接打印没有的循环控制指令。
- 循环几乎肯定略微更好,因为进行字符串连接是额外的工作。
- 这是额外的工作,但如果我们只是谈论您问题中的那种事情,那就太少了 - 它只是一些字符串。在实际观察之前,您过于担心一个非常小的性能问题。如果您开始在循环中串联 至少 100 次迭代,您可能会担心。过早的优化是万恶之源。关于这一点,回答这个问题的理想方法是编写一个程序来测量所花费的时间。这很容易做到。
M.toString()
如果M == null
会抛出异常。永远记得问问自己当某事null
时会发生什么。您可能 想要 抛出异常,但我认为在这种情况下这有点混乱。假设您要将null
转换为字符串"null"
,请使用String.valueOf(M)
.- Java 方法和变量的命名约定是
camelCase
,以小写字母开头,因此printMsg
、output
、m
、msg
. - 考虑 https://codereview.stackexchange.com/ 这类问题,因为它是专门为此量身定做的。