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

说我有:

int someValue = 42;

现在,我要将int值转换为String。 哪种方法更有效?

// One
String stringValue = Integer.toString(someValue);

// Two
String stringValue = String.valueOf(someValue);

// Three
String stringValue = someValue + "";

我只是好奇是否有真正的区别,或者一个比另一个更好?

Ascalonian asked 2019-10-08T10:46:33Z
6个解决方案
73 votes

测试了10m分配的数字10

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

一个似乎赢了

编辑:JVM是Mac OS X 10.5下的标准'/ usr / bin / java'

java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-284)
Java HotSpot(TM) Client VM (build 1.5.0_16-133, mixed mode, sharing)

更多编辑:

要求的代码

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 answered 2019-10-08T10:47:25Z
36 votes

即使根据cobbal的度量,#1似乎是最快的,但我还是强烈建议使用StringBuilder。我这样做的原因是此调用未明确包含参数的类型,因此稍后再使用 如果决定将其从int更改为double,则无需修改此调用。 与#2相比,#1的速度增益很小,众所周知,“过早的优化是万恶之源”。

第三个解决方案是不可能的,因为它隐式地创建了StringBuilder并将附加组件(在这种情况下为数字和空字符串)附加到该组件,最后将其转换为字符串。

David Hanak answered 2019-10-08T10:47:57Z
8 votes

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

Björn answered 2019-10-08T10:48:21Z
8 votes

查看JRE的源代码,您可能会发现区别。 还是没有。实际上,Strinv.valueOf(int foo)的实现如下:

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

和Integer.toString(int foo,int radix)

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解决方案首先将int值转换为String,然后与空String串联。 这显然是最昂贵的情况。

paweloque answered 2019-10-08T10:49:05Z
5 votes

(大卫·哈纳克(David Hanak)对面。

即使根据cobbal的度量,#1似乎是最快的,但我还是强烈建议您使用Integer.toString()。 我这样做的原因是,此调用显式包含参数的类型,因此,如果稍后您决定将其从int更改为double,则很明显此调用已更改。 如果是二进制格式,您会做同样的事情,不是吗? 与#2相比,#1的速度增益很小,众所周知,“过早的优化是万恶之源”。

Tom Hawtin - tackline answered 2019-10-08T10:49:36Z
2 votes

Integer.toString()的速度较慢,如David Hanak所示。

Integer.toString()依次调用Integer.toString()。因此,最好使用Integer.toString()

因此,Integer.toString()是最快的。

Real Red. answered 2019-10-08T10:50:14Z
translate from https://stackoverflow.com:/questions/653990/what-is-the-most-efficient-way-to-convert-an-int-to-a-string