以下情况:我有很多日志语句,应该只在 Debug模式下执行。
关于如何实现这个,我有两个选择:
一个
public void log(String message){
if(debug) doLog(message);
}
还有很多这样的陈述:
log(something.toString() + "somelogmessage");
B
public void log(message){
doLog(message);
}
还有很多这样的陈述:
if(debug) log(something.toString() + "somelogmessage");
虽然 A 更易读且生成的代码更少,但如果 debug 为 false,B 会避免字符串连接。
为了提高性能而编写这些额外的样板代码是否值得? 或者它们是否相等(例如,由于编译器优化)?
最佳答案
正如其他人所提到的(并且您已经通过您的标签确认),这是一个微观优化,在绝大多数情况下可能无关紧要。但是,如果您希望在不弄乱代码的情况下避免连接,则可以添加一个接受两个参数的重载:
public void log(Object prefix, String message){
if(debug) doLog(prefix.toString() + message);
}
然后调用
log(something, "somelogmessage");
如果您的消息可以由多个值组成,您可以改用可变参数:
public void log(String... values){
if(debug) doLog(String.join("", values));
}
虽然在这种情况下性能优势更值得怀疑。
关于java - 字符串连接的性能有多重要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37824032/