以下哪种方式更快?有什么区别?
int i=0x10;
String s=i+"";
String s1=Integer.toString(i);
String s2=String.valueOf(i);
我不知道是否还有其他方式 提前谢谢。
答案 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);