Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:Integer.toString()方法比向整型值中添加空字符串更好吗?_Java - Fatal编程技术网

Java:Integer.toString()方法比向整型值中添加空字符串更好吗?

Java:Integer.toString()方法比向整型值中添加空字符串更好吗?,java,Java,可能重复: 我正在用PMD规则测试一些Java代码。效率的规则之一是“AddingEmptyString”。下面是规则的说明 查找正在添加的空字符串文字。这是一种将任何类型转换为字符串的低效方法 你能解释为什么Integer.toString比将空字符串添加到整型值更好吗?在第一个示例中,你实例化了一个字符串对象(“”),然后是另一个字符串对象来保存整型到字符串转换的结果,总共创建了两个对象 第二种方法是只创建一个string对象,该对象是在执行Integer.toString()时创建的,这

可能重复:

我正在用PMD规则测试一些Java代码。效率的规则之一是“AddingEmptyString”。下面是规则的说明

查找正在添加的空字符串文字。这是一种将任何类型转换为字符串的低效方法


你能解释为什么Integer.toString比将空字符串添加到整型值更好吗?

在第一个示例中,你实例化了一个字符串对象(“”),然后是另一个字符串对象来保存整型到字符串转换的结果,总共创建了两个对象


第二种方法是只创建一个string对象,该对象是在执行Integer.toString()时创建的,这是错误的,因为第一种方法比第二种方法执行的操作更多。编译器将第一行翻译成

String s = "" + Integer.toString(123);
与相比,它有一个额外的字符串连接

String t = Integer.toString(456);

即使编译器优化了空字符串的连接,当显式使用Integer.toString时,代码行的用途也会更加明确。

这也不好,因为字符串连接是一个相对昂贵的操作。使用StringBuilder可能比您的第一个片段稍微高效一些。您可能会注意到,您通常会看到类似System.out.println(“+i”)的内容,其中i是一个int,但是这种连接是非常不必要的,更不用说是错误的。这相当于…println(“+Integer.valueOf(i).toString()”),它看起来更混乱,但做的是相同的事情。。。println(i)很好用。

另请参阅,我总是很好地使用前者,而不是后者。过早优化是解决这一问题的有效途径。。。无论如何谁说+123不好p除非有一个特定的“太慢”的性能案例经过测试(和验证),否则我会支持前者。我也使用前者。不管多么正确,如果Java的笨拙,后者是一个很好的例子。鉴于StringBuilder.append(int)最终调用Integer.toString(int)你认为如何?实际上“+123”最终成为一个新的StringBuilder().append(“”).append(123).toString()。相对昂贵——到什么程度?(谁在乎?)谁在乎是否使用和/或创建了一个新的/中间字符串对象?海报在乎,因为他问了效率方面的差异。
String t = Integer.toString(456);