每次我必须将 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)
?