每次我必须将 a 转换int为 a时String,我都会选择""+a或Integer.toString(a)。现在我想知道哪种方式更快,所以我编写了一个简单的基准测试,调用 function_1、function_2 和 function_3 10000000 次,并打印处理这些函数需要多长时间。以下是功能:
public static String i="";
public static String j="";
public static String k="";
public static void function_1()
{
i=Integer.toString(getOne());
}
public static void function_2()
{
j=""+1;
}
public static void function_3()
{
j=""+getOne();
}
public static int getOne()
{
return 1;
}
输出是:
Benchmarking starting...
Executing function_1 10000000 time(s)...
Done executing function_1 in 476 ms.
Executing function_2 10000000 time(s)...
Done executing function_2 in 8 ms.
Executing function_3 10000000 time(s)...
Done executing function_3 in 634 ms.
Benchmarking complete!
我认为function_2是如此之快,因为它被编译为
public static void function_2()
{
j="1";
}
所以为了避免这种情况,我使用了这个函数getOne()。但这里是有趣的部分(对我来说):function_3必须在不使用原始toString方法的情况下编译Object(在这种情况下Integer.toString(1)因为int是原始的)。我的问题是:编译器实际上是如何威胁的""+1,所以它比调用慢Integer.toString(1)?