java - 字符串连接的性能有多重要?

标签 java android performance micro-optimization

以下情况:我有很多日志语句,应该只在 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/

相关文章:

java - eclipse : Import maven project into current workspace location

java - 我可以在非 EE 独立环境中使用 JPA 注释吗?

android - 包重命名后出现 ClassNotFoundException

android - Android File.exists() 不区分大小写吗?

performance - 如何提高 Jenkins 服务器的性能?

c++ - 我应该使用元组 vector 还是数组 vector ?

java - 解析异常 : Unparseable date error trying to parse a date from csv (windows)

java - 为什么 Jackson,GSON...不使用泛型而是传递类对象来反序列化对象

android - 客户端上的 Bcrypt 哈希密码与服务器密码不匹配

java - 如何使用 Radaee Pdf 阅读器 sdk