【问题标题】:Java: Is the method Integer.toString() better than adding empty string to integer type value? [duplicate]Java:方法 Integer.toString() 是否比将空字符串添加到整数类型值更好? [复制]
【发布时间】:2010-10-20 02:14:30
【问题描述】:

可能重复:
Is conversion to String using (“” + <int value>) bad practice?

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

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

    String s = "" + 123; // bad 
    String t = Integer.toString(456); // ok 

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

【问题讨论】:

  • 我总是很好地使用前者,而不是后者。过早的优化是 r... 无论如何。谁说"" + 123 不好? :p 除非有一个特定“太慢”的性能案例经过测试(和验证),否则我会支持前者。
  • 我也用前者。不管多么正确,如果 Java 的笨拙,后者就是一个很好的例子。
  • 鉴于 StringBuilder.append(int) 最终调用 Integer.toString(int) 你怎么看?

标签: java


【解决方案1】:

这很糟糕,因为第一种方法比第二种方法执行的操作更多。编译器会将第一行翻译成等价于

String s = "" + Integer.toString(123);

相比,它有一个额外的字符串连接
String t = Integer.toString(456);

即使编译器优化掉与空字符串的连接,当显式使用 Integer.toString 时,这行代码的目的会更加清晰。

【讨论】:

  • 实际上 "" + 123 最终成为一个新的 StringBuilder().append("").append(123).toString()。
【解决方案2】:

在第一个示例中,您将实例化一个 String 对象 (""),然后实例化另一个 String 对象来保存 Integer 到 String 转换的结果,总共创建了 2 个对象;

第二个你只创建一个字符串对象,它是在你执行 Integer.toString() 时创建的

【讨论】:

  • 谁在乎是否使用和/或创建了新的/中间字符串对象?
  • 发帖者很在意,因为他询问了效率方面的差异。
【解决方案3】:

这也很糟糕,因为字符串连接是一项相对昂贵的操作。使用 StringBuilder 可能会比您的第一个片段更有效。您可能会注意到,您通常会看到类似 System.out.println(""+i) 的内容,其中 i 是一个 int,但这种连接是完全不必要的,更不用说错了。这相当于 ...println(""+Integer.valueOf(i).toString()) 看起来更混乱但做同样的事情。 ...println(i) 工作得很好。

【讨论】:

  • 相对昂贵——对什么? (谁在乎呢?)
猜你喜欢
  • 1970-01-01
  • 2021-06-01
  • 2023-03-16
  • 2012-01-13
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2012-01-10
相关资源
最近更新 更多