String.format()vs string concatenation performance
这两个习语在性能上有什么区别吗?String.format()vs string concatenation performance
String firstStr = "Hello "; String secStr = "world";
String third = firstStr + secStr;
和
String firstStr = "Hello "; String secStr = "world";
String third = String.format("%s%s",firstStr , secStr);
我知道用+运算符串联是不好的性能特别是如果操作做了很多次,但怎么样的String.format()?它是相同的还是可以帮助提高性能?
回答:
第二个会更慢(如果你看看String.format()
的源代码,你会明白为什么)。这只是因为String.format()
比简单的连接执行更多的代码。在一天结束时,两个代码版本都会创建String
的3个实例。正如其他人已经指出的,使用String.format()
还有其他原因,而不是性能相关的。
回答:
如此excellent answer中所述,您宁愿使用String.format,但主要是因为本地化问题。
假设您必须为不同的语言提供不同的文本,那么使用String.format - 您可以插入新的语言(使用资源文件)。但连接会留下乱码。
参见:Is it better practice to use String.format over string Concatenation in Java?所有的
回答:
首先,我只是把一个声明反对过早的优化。除非您确信这将成为您程序中的热点,否则只需选择最适合您程序的构造即可。
如果你是合理肯定,但是,并且想要对连接有很好的控制权,只需直接使用StringBuilder
即可。这就是内置的串联操作,无论如何,没有理由认为它很慢。只要你保持相同的StringBuilder
并继续追加它,而不是冒险连续创建几个(这将不得不被用先前创建的数据“初始化”),你将有适当的O(n)性能。特别是如果您确保以合适的容量初始化StringBuilder
。
这也说,然而,一个StringBuilder
是,作为中提到的,内置串联操作使用,无论如何,所以如果你只是保持你所有的串连“内联” - 即使用A + B + C + D
,而不是像e = A + B
后跟f = C + D
后跟e + f
(这样,在整个操作中使用和附加相同的StringBuilder
) - 那么没有理由认为它会很慢。
编辑:回复您的评论,我会说String.format
总是比较慢。即使它以最佳方式附加,也无法做到这一点更快比StringBuilder
(并因此也是串联操作)无论如何,但它也必须创建一个Formatter
对象,解析输入字符串,等等。所以还有更多,但它仍然无法更快地完成基本操作。
另外,如果您从内部了解Formatter
的工作方式,您会发现它也(默认情况下)使用StringBuilder
,就像拼接操作一样。因此,它执行完全相同的基本操作 - 即为您提供的字符串输入StringBuilder
。它只是以一种更为迂回的方式来做到这一点。
以上是 String.format()vs string concatenation performance 的全部内容, 来源链接: utcz.com/qa/263803.html