【发布时间】:2015-10-14 07:14:21
【问题描述】:
在我们的代码中,我们经常使用Preconditions检查参数:
Preconditions.checkArgument(expression, "1" + var + "3");
但有时,此代码会被非常频繁地调用。这会对性能产生显着的负面影响吗?我们应该切换到
Preconditions.checkArgument(expression, "%s%s%s", 1, var, 3);
?
(我希望大多数情况下条件为真。假意味着错误。)
【问题讨论】:
-
第一个真的只是简单的字符串字面连接?
-
是的 - 这就是问题的核心 - 具有显着的性能影响
-
字符串连接可能发生在编译时,因此它不应该影响运行时性能。也就是说,if 您正在连接文字(而不是变量)。
-
变量字符串通过StringBuilder at runtime连接,所有常量部分在编译时放在一起。
.format()保证具有最差的性能(必须弄清楚那些 %s 的含义等)。 (循环中除外)在源代码中使用+并让编译器弄清楚。 -
1) 鉴于 Google Java 库团队必须维护他们添加的任何方法,添加不必要的方法对他们来说将是净损失。 2) 可变参数方法不需要提供带有占位符的消息,您可以简单地调用
String.format,并避免添加重载。该方法的存在肯定表明 Google 的代码有一些净积极的好处;我没有数据可以说明这是否会带来性能优势。
标签: java performance guava preconditions