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

回到顶部