将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()
是最快的..