首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Integer.toString()和String.valueOf()之间的性能差异?

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

Stack Overflow用户
提问于 2020-03-29 12:30:44
回答 3查看 448关注 0票数 3

我有一个整数,比如说,int a = 123;

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

代码语言:javascript
复制
1. Integer.toString(a)
2. String.valueOf(a)

我想知道,如果以上两种方法之间有任何性能差异,假设我们对10k或更多的整数执行此操作,如果是,那么为什么?

EN

回答 3

Stack Overflow用户

发布于 2020-03-29 12:35:54

String.valueOf(int)在内部调用Integer.toString(int)。因此不会有任何性能差异。或者从理论上讲,Integer.toString应该更好,因为少了1个调用。

票数 4
EN

Stack Overflow用户

发布于 2020-03-29 12:35:47

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

代码语言:javascript
复制
public static String valueOf(int i) {
    return Integer.toString(i);
}

这也是因为Integer.toString会更快,因为它可以跳过调用堆栈上的String.valueOf,但我不知道这种差异是否足以在实践中引起注意。

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

编辑:您可以通过在您的集成开发环境中使用go to definition自己找到它。通过选择函数调用并在Intellij Idea中按Ctrl键+ B键,我能够获得此代码片段。

票数 2
EN

Stack Overflow用户

发布于 2020-03-29 13:19:02

下面是JDK 8之前这两种方法的源代码

这是Intger.toString()的源代码

代码语言:javascript
复制
 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)的源代码

代码语言:javascript
复制
public static String valueOf(int i) {
return Integer.toString(i);
}

正如您所看到的,在这两种情况下都会调用Integer.toString(),这两种情况下的性能几乎没有区别

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60910187

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档