使用(""+ <int value>)转换为String不良做法?

Mic*_*Sim 16 java string

是使用Java转换为String

"" + <int value>
Run Code Online (Sandbox Code Playgroud)

不好的做法?与String.valueOf(...)相比,它有任何缺点吗?

代码示例:

int i = 25;
return "" + i;
Run Code Online (Sandbox Code Playgroud)

VS:

int i = 25;
return String.valueOf(i);
Run Code Online (Sandbox Code Playgroud)

更新:(来自评论)

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

Jon*_*eet 34

我总是喜欢这个String.valueOf版本:主要是因为它显示了你想要做的事情.目标不是字符串连接 - 它是转换为字符串,"字符串值i".

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

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

  • 为"因为它显示了您要做的事情"+1 (8认同)

Kip*_*Kip 11

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

编辑我刚检查了String类的来源:

public static String valueOf(int i) {
  return Integer.toString(i, 10);
}
Run Code Online (Sandbox Code Playgroud)

和整数类:

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);
  }
  ...
Run Code Online (Sandbox Code Playgroud)

如果你打电话String.valueOf(i),它会打电话Integer.toString(i, 10),然后打电话Integer.toString(i).

所以Integer.toString(i)应该是非常略低的速度比String.valueOf(i),因为你会被切割出两个函数调用.(尽管编译器可以优化第一个函数调用.)

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


Mal*_*eur 9

绝对使用String.valueOf(i).

虽然我不确定编译器端的优化,但最坏的情况是使用""+:

  1. ""创建一个新的空字符串.
  2. ""+创建一个StringBuilder(Java 1.5-16)
  3. 然后将""附加到StringBuilder

换句话说,如果使用字符串添加,会发生很多开销.这就是为什么不建议在循环中的字符串上使用+运算符.通常,在可能的情况下,始终使用Boolean.valueOf,Integer.valueOf,String.valueOf ...等.你将节省内存和开销.