将整数转换为字符串的最有效方法是什么?

2022-08-31 14:42:43

假设我有:

int someValue = 42;

现在我想将该 int 值转换为字符串。哪种方式更有效?

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

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

// Three
String stringValue = someValue + "";

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


答案 1

测试了1000万次分配的数字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

答案 2

尽管根据cobbal的测量,#1似乎是最快的,但我强烈建议使用。我这样做的原因是,此调用未显式包含参数的类型,因此,如果以后您决定将其从 int 更改为 double,则无需修改此调用。与#2相比,#1的速度提升只是很小,众所周知,“过早优化是所有邪恶的根源”。String.valueOf()

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