在我们的代码中,我们经常使用Preconditions
检查参数:
Preconditions.checkArgument(expression, "1" + var + "3");
但有时,这段代码会被非常频繁地调用。这会对性能产生显着的负面影响吗?我们应该切换到
Preconditions.checkArgument(expression, "%s%s%s", 1, var, 3);
?
(我希望大多数时候条件为真。假意味着错误。)
最佳答案
如果您希望检查大多数时候不会抛出任何异常,则没有理由使用字符串连接。在调用方法之前进行连接(使用 .concat
或 StringBuilder
)比在确定会抛出异常后再进行连接要花费更多的时间。
相反,如果您抛出异常,则说明您已经处于慢速 分支。
还值得一提的是,Guava 使用自定义且更快的格式化程序,它只接受 %s
。所以时间损失实际上更类似于标准记录器 {}
句柄(在 slf4j 或 log4j 2 中)。但如上所述,这是在您已经处于慢速分支的情况下。
无论如何,我强烈反对您的任何建议,但我会改用这个建议:
Preconditions.checkArgument(expression, "1%s3", var);
您应该只将变量放在 %s
中,而不是常量以获得边际速度。
关于java - 将 Guava.Preconditions 与串联字符串一起使用时是否会对性能产生影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33118919/