我有一个整数,比如说,int a = 123;
现在,我可以使用以下两种方法将其转换为字符串:
1. Integer.toString(a)
2. String.valueOf(a)我想知道,如果以上两种方法之间有任何性能差异,假设我们对10k或更多的整数执行此操作,如果是,那么为什么?
发布于 2020-03-29 12:35:54
String.valueOf(int)在内部调用Integer.toString(int)。因此不会有任何性能差异。或者从理论上讲,Integer.toString应该更好,因为少了1个调用。
发布于 2020-03-29 12:35:47
性能应该几乎相同,因为String.valueOf(a)的定义如下:
public static String valueOf(int i) {
return Integer.toString(i);
}这也是因为Integer.toString会更快,因为它可以跳过调用堆栈上的String.valueOf,但我不知道这种差异是否足以在实践中引起注意。
不幸的是,java通常不会内联函数调用,因此至少需要花费额外的时间来加载函数,但在第一次调用之后,CPU缓存可能会使重定向几乎不可察觉。
编辑:您可以通过在您的集成开发环境中使用go to definition自己找到它。通过选择函数调用并在Intellij Idea中按Ctrl键+ B键,我能够获得此代码片段。
发布于 2020-03-29 13:19:02
下面是JDK 8之前这两种方法的源代码
这是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)的开销,我将几乎是任何东西,但正如你可能知道的那样,方法调用涉及许多事情,比如将方法调用放在堆栈上,保存状态和控件返回位置,然后将其从堆栈中弹出,这些都将被避免,但计算机仍然太快,所以它不算数
https://stackoverflow.com/questions/60910187
复制相似问题