【发布时间】:2012-09-29 00:13:28
【问题描述】:
可能重复:
Should I use Java's String.format() if performance is important?
我想知道在 Java 应用程序中使用 String.format 而不是 StringBuilder 是否更好...所以,我只写了一个简单的测试,如下所示:
public static void main(String[] args) {
int i = 0;
Long start = System.currentTimeMillis();
while (i < 10000) {
String s = String.format("test %d", i);
i++;
}
System.out.println(System.currentTimeMillis() - start);
i = 0;
start = System.currentTimeMillis();
while (i < 10000) {
String s = new StringBuilder().append("test ").append(i).toString();
i++;
}
System.out.println(System.currentTimeMillis() - start);
}
结果如下:
238
15
所以,如果我的测试有效,StringBuilder 比 String.format 快。好的。
现在,我开始思考String.format 的工作原理。是不是简单的字符串拼接,比如"test " + i?
StringBuilder 串联和String.format 有什么区别?有没有像String.format 这样简单又像StringBuilder 这样快速的方法?
【问题讨论】:
-
您帖子中的一个重要假设是:“如果我的测试有效” ;-) 您应该阅读how to create a micro benchmark in Java。
-
请记住,第一种情况实际上是
String.format("test %d", new Object[]{new Integer(i)}),如果编译器不够聪明,这可能会占开销的很大一部分。 -
String.format每次都必须解析格式字符串,然后做一些相当动态的事情来转换参数。使用StringBuilder的方法不要;构建字符串所需的操作序列来自字节码。解析和有效执行格式字符串可能比执行代码要数量级的字符串。 -
你为什么还要比较这些?尝试使用 StringBuilder 编写类似
String.format("% 5.3f")的内容,然后您就会明白为什么它会变慢。
标签: java performance string-concatenation