Java Integer.toString()和String.valueOf()之间的性能差异?

Java Integer.toString()和String.valueOf()之间的性能差异?,java,string,integer,Java,String,Integer,我有一个整数,比如说,inta=123 现在,我可以使用以下两种方法将其转换为字符串: 1. Integer.toString(a) 2. String.valueOf(a) 我想知道,如果在上述两种方法之间有任何性能差异,比如说当我们对10k整数或更多整数执行此操作时,如果是,那么为什么 性能应该几乎相同,因为String.valueOf(a)的定义如下: public静态字符串值of(int i){ 返回整数.toString(i); } 这也是为什么Integer.toString会更

我有一个整数,比如说,
inta=123

现在,我可以使用以下两种方法将其转换为字符串:

1. Integer.toString(a)
2. String.valueOf(a)

我想知道,如果在上述两种方法之间有任何性能差异,比如说当我们对10k整数或更多整数执行此操作时,如果是,那么为什么

性能应该几乎相同,因为
String.valueOf(a)
的定义如下:

public静态字符串值of(int i){
返回整数.toString(i);
}
这也是为什么
Integer.toString
会更快的原因,因为它可以跳过调用堆栈上的
String.valueOf
,但我不知道这种差异是否足以在实践中引起注意

不幸的是,java通常不内联函数调用,因此至少需要花费额外的时间加载函数,但在第一次调用之后,CPU缓存可能会使重定向几乎不被注意


编辑:您可以在IDE中使用go to definition自行查找。我可以通过选择函数调用并在Intellij Idea中按Ctrl+B键来获得此代码片段。

字符串。valueOf(int)
内部调用
整数。toString(int)
。因此,不会有任何性能差异。或者理论上Integer.toString应该更好,因为少调用1次

下面是从JDK 8开始这两种方法的源代码

这是
Intger.toString()的源代码

正如您所看到的,在性能上几乎没有任何差异,在这两种情况下都调用了
Integer.toString()


但是我必须选择一个,然后答案是
Integer.toString()
,因为这样我可以减少调用
String.valueOf(int)
的开销,我几乎什么都不是,但是你可能知道,方法调用涉及很多事情,比如将方法调用放在堆栈上,保存状态和控制返回位置,然后将其从堆栈中弹出,所有这些都将被避免,但计算机速度太快,因此无法计数

使用测试它。这是否回答了您的问题?Java虚拟机通常执行某种形式的JIT,它可以内联这样的方法。
 public static String toString(int i) {
    if (i == Integer.MIN_VALUE)
        return "-2147483648";
    int size = (i < 0) ? stringSize(-i) + 1 : stringSize(i);
    char[] buf = new char[size];
    getChars(i, size, buf);
    return new String(buf, true);
}
public static String valueOf(int i) {
return Integer.toString(i);
}