Java的printf()方法对于连接和打印字符串是否高效?

14 浏览
0 Comments

Java的printf()方法对于连接和打印字符串是否高效?

更新:我测试了使用+操作符进行连接的性能,结果与使用StringBuilder几乎相同(结果在结尾处)。这表明,正如你们在答案中提到的,较慢的性能是由于格式分析造成的。

结论:Java的printf()方法不是一种高效的字符串连接和打印方法。为了获得更好的性能,应该使用+操作符或者更好地使用StringBuilder

Java的printf()在创建字符串时是否使用缓慢的连接方式?也就是说,在将每个元素附加到最终字符串后,它是否创建一个新的字符串?

我测试了使用StringBuilder创建字符串,运行时间提高了约4倍。在我的程序中,这部分代码被调用了成千上万次。

两个测试之间唯一的区别是以下代码块:

1)printf()(0.8秒):

System.out.printf("%d %d %d %d %d %d\n", nums[a], nums[b],
    nums[c], nums[d], nums[e], nums[f]);

2)StringBuilder + println()(0.2秒):

StringBuilder sb = new StringBuilder();
sb.append(nums[a]);
sb.append(' ');
sb.append(nums[b]);
sb.append(' ');
sb.append(nums[c]);
sb.append(' ');
sb.append(nums[d]);
sb.append(' ');
sb.append(nums[e]);
sb.append(' ');
sb.append(nums[f]);                  
System.out.println(sb.toString());

3)+操作符 + println()(0.22秒):

System.out.println(nums[a] + " " + nums[b] + " " + nums[c] + " " + nums[d] + " "
                          + nums[e] + " " + nums[f]);

0
0 Comments

Java的printf()方法用于拼接和打印字符串,是否高效?

这个问题的出现是因为printf()方法在创建字符串时是否使用了缓慢的拼接方式。

事实上,printf()方法的拼接方式是没有问题的。

然而,它的速度相对较慢,原因是在分析格式字符串时需要考虑许多可能性和分支。

为了解决这个问题,可以事先解析字符串,并使用一个List来存储每个参数的FormatItem(还需要添加所有前面的固定文本)。我曾经尝试过类似的方法,速度提升了2倍以上。

然而,这个解决方法变得更加复杂,因为还需要考虑像%3$s这样的格式。

总结起来,Java的printf()方法在拼接和打印字符串时并不高效,可以通过解析字符串并使用List来提升速度。但是由于格式的复杂性,这个解决方法可能会变得更加复杂。

0