整数到String,哪种方法更快?

时间:2014-03-13 13:07:48

标签: java

以下哪种方式更快?有什么区别?

int i=0x10;
String s=i+"";
String s1=Integer.toString(i);
String s2=String.valueOf(i);

我不知道是否还有其他方式 提前谢谢。

3 个答案:

答案 0 :(得分:4)

  

以下哪种方式更快?有什么区别?

看一下String.valueOf(int)的实现(以超链接的Grepcode格式):

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

这应该给你一个提示 - 特别是如果你熟悉JIT编译器在static方法调用上常规执行的方法调用内联的概念。

关于正确的微基准测试的主题,您应该使用jmh来执行此操作:

@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
@OperationsPerInvocation(1)
@Warmup(iterations = 5, time = 200, timeUnit=MILLISECONDS)
@Measurement(iterations = 30, time = 200, timeUnit=MILLISECONDS)
@State(Scope.Thread)
@Threads(1)
@Fork(1)
public class Measure
{
  private int arg;

  @Setup public void setup() {
    arg = (int) System.nanoTime();
  }

  @GenerateMicroBenchmark public String integerToString() {
    return Integer.toString(arg);
  }

  @GenerateMicroBenchmark public String stringValueOf() {
    return String.valueOf(arg);
  }

  @GenerateMicroBenchmark public String plus() {
    return ""+arg;
  }
}

这些是我的结果:

Benchmark                       Mode   Samples         Mean   Mean error    Units
o.s.Measure.integerToString     avgt        30       53.023        8.868    ns/op
o.s.Measure.plus                avgt        30       54.043        6.833    ns/op
o.s.Measure.stringValueOf       avgt        30       52.071        8.217    ns/op

答案 1 :(得分:0)

String s1=Integer.toString(i);
String s2=String.valueOf(i);

在上面两个Integer.toString()将快速为String.valueOf(i)将调用Integer.toString()方法进行转换.Below是toString方法的实现

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

答案 2 :(得分:0)

String s=i+"";

在这种情况下,首先我将被转换为字符串,然后它将被附加到字符串,所以已经将i转换为字符串,然后再次连接,所以与其他两个选项相比,它将是最慢的。

String s2=String.valueOf(i);

这会调用Integer.toString(i, 10);,因此它比直接调用Integer.toString(i);

要慢

最后,相对更快的是Integer.toString(i);