将int转换为String的最有效方法是什么?

说我有:

int someValue = 42; 

现在我想将该int值转换为一个string。 哪种方法更有效率?

 // One String stringValue = Integer.toString(someValue); // Two String stringValue = String.valueOf(someValue); // Three String stringValue = someValue + ""; 

我只是好奇,如果有任何真正的差异,或者比另一个更好?

testing了数字10的10m分配

 One: real 0m5.610s user 0m5.098s sys 0m0.220s Two: real 0m6.216s user 0m5.700s sys 0m0.213s Three: real 0m12.986s user 0m11.767s sys 0m0.489s 

一个似乎赢了

编辑:在Mac OS X 10.5下,JVM是标准的“/ usr / bin / java”

 java版本“1.5.0_16”
 Java(TM)2运行环境,标准版(build 1.5.0_16-b06-284)
 Java HotSpot(TM)客户端虚拟机(构build1.5.0_16-133,混合模式,共享)

更多编辑:

代码按要求

 public class One { public static void main(String[] args) { int someValue = 10; for (int i = 0; i < 10000000; i++) { String stringValue = Integer.toString(someValue); } } } 

情况2和3相似
运行使用

 javac *.java; time java One; time java Two; time java Three 

即使根据cobbal的测量 ,#1似乎是最快的,我强烈build议使用String.valueOf() 。 我的理由是这个调用没有明确包含参数的types,所以如果你以后决定把它从int改成double,那么就不需要修改这个调用。 #1与#2相比速度的增长只是最小的,众所周知,“不成熟的优化是万恶之源”。

第三个解决scheme是不可能的,因为它隐式地创build了一个StringBuilder并附加了组件(在这个例子中是数字和空string),最后把它转换成一个string。

前两个例子实际上是相同的,因为String.valueOf(int)使用Integer.toString(int)方法。 第三个是丑陋的,可能效率较低,因为级联在Java中很慢。

看看JRE的源代码,你可能会看到不同之处。 或者没有。 实际上Strinv.valueOf(int foo)实现如下:

 public static String valueOf(int i) { return Integer.toString(i, 10); } 

和Integer.toString(int foo,int基数)

 public static String toString(int i, int radix) { ... if (radix == 10) { return toString(i); } ... } 

这意味着如果你使用基数10,你最好直接调用Integer.toString(int foo)。 对于其他情况使用Integer.toString(int foo,int radix)。

concat解决scheme首先将int值转换为一个String,然后与空string连接。 这显然是最昂贵的情况。

(David Hanak对面)

即使根据cobbal的测量,#1似乎是最快的,我强烈build议使用Integer.toString()。 我的理由是这个调用明确地包含了参数的types,所以如果你以后决定把它从int改成double,很明显这个调用已经改变了。 如果是二进制格式,你会这样做,不是吗? #1与#2相比速度的增长只是最小的,众所周知,“不成熟的优化是万恶之源”。

"" + int是如David Hanak所示的那样慢。

String.valueOf() inturn调用Integer.toString() 。 因此,使用Integer.toString()更好。

所以, Integer.toString()是最快的..