我可以定义一个整数,比如说:int a = 123;
现在,我可以使用以下两种方法将它转换为字符串:
1. Integer.toString(a)
2. String.valueOf(a)
我想知道,在对1万个或更多整数执行此操作时,上述两种方法之间是否存在性能差异,如果有,为什么?
我可以定义一个整数,比如说:int a = 123;
现在,我可以使用以下两种方法将它转换为字符串:
1. Integer.toString(a)
2. String.valueOf(a)
我想知道,在对1万个或更多整数执行此操作时,上述两种方法之间是否存在性能差异,如果有,为什么?
String.valueOf(int)
内部调用了Integer.toString(int)
。因此,它们之间不会有任何性能差异。理论上,Integer.toString()
应该更好,因为少了一次调用。
Intger.toString()
的源代码。 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);
}
这是 String.valueOf(int)
的源代码
public static String valueOf(int i) {
return Integer.toString(i);
}
Integer.toString()
。Integer.toString()
。因为这样可以减少调用 String.valueOf(int)
的开销,虽然这个削减的量非常小,但是您可能知道,方法调用涉及许多事情,例如将方法调用放在堆栈上、保存状态和控制返回位置、弹出它等,所有这些步骤都将被避免,但计算机运行速度太快,所以不会有什么影响。性能应该几乎相同,因为String.valueOf(a)
的定义如下:
public static String valueOf(int i) {
return Integer.toString(i);
}
很明显,Integer.toString
更快,因为它可以跳过调用堆栈上的String.valueOf
,但我不知道实际差异是否足够明显。
不幸的是,Java通常不会内联函数调用,因此至少需要额外花费时间加载函数,但在第一次调用后,CPU缓存可能会使重定向几乎不可见。
编辑:您可以通过在IDE中使用“转到定义”来自行查找。我能够通过选择函数调用并在Intellij Idea中按Ctrl + B来获取此代码片段。