使用(“” + <int值>)转换为字符串是不好的做法吗?

2022-09-02 22:58:28

在 Java 中转换为字符串是否使用

"" + <int value>

不良做法?与String.valueOf(...)相比,它有什么缺点吗?

代码示例:

int i = 25;
return "" + i;

与:

int i = 25;
return String.valueOf(i);

更新:(来自评论)

Integer.toString(int i)String.valueOf(...)相比呢?


答案 1

我总是更喜欢这个版本:主要是因为它显示了你想做什么。目的不是字符串串联 - 而是转换为字符串,“字符串值”。String.valueOfi

第一种形式也可能效率低下 - 取决于编译器是否发现您正在执行的操作。如果没有,则可能是创建新的 StringBuffer 或 StringBuilder 并附加值,然后将其转换为字符串。

有趣的是,我有一篇关于这个话题的文章 - 几年前写的;我的网站IIRC上的第一批Java文章之一。


答案 2

还有 Integer.toString(int i),它为您提供了将字符串作为十六进制值获取的选项(通过传递第二个参数 16)。

编辑我刚刚检查了字符串类的源代码:

public static String valueOf(int i) {
  return Integer.toString(i, 10);
}

和整数类:

public static String toString(int i, int radix) {
  if (radix < Character.MIN_RADIX || radix > Character.MAX_RADIX)
    radix = 10;

  /* Use the faster version */
  if (radix == 10) {
    return toString(i);
  }
  ...

如果调用 ,则调用 ,然后调用 。String.valueOf(i)Integer.toString(i, 10)Integer.toString(i)

所以应该比 快一点,因为你会削减两个函数调用。(尽管编译器可以优化第一个函数调用。Integer.toString(i)String.valueOf(i)

当然,仍然可以为 String.valueOf() 创建可读性参数,因为它允许您更改参数的类型(甚至处理 null!),并且性能差异可以忽略不计。