Java的printf()方法对于连接和打印字符串是否高效?
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]);
Java的printf()方法用于拼接和打印字符串,是否高效?
这个问题的出现是因为printf()方法在创建字符串时是否使用了缓慢的拼接方式。
事实上,printf()方法的拼接方式是没有问题的。
然而,它的速度相对较慢,原因是在分析格式字符串时需要考虑许多可能性和分支。
为了解决这个问题,可以事先解析字符串,并使用一个List
然而,这个解决方法变得更加复杂,因为还需要考虑像%3$s这样的格式。
总结起来,Java的printf()方法在拼接和打印字符串时并不高效,可以通过解析字符串并使用List