每当我需要将
输出结果为:
为了避免这种情况,我使用了函数
int
转换为 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
而不使用Object
的原始toString
方法(在这种情况下为Integer.toString(1)
,因为int
是原始类型)。我的问题是:编译器如何处理""+1
,使其比调用Integer.toString(1)
慢?
function_3
使用了StringBuilder
而function_1
没有。在内部,StringBuilder
将调用String.valueOf()
。 - parsifalfunction_3
比function_1
慢。如果你想知道为什么它会“更快”,那就不要再纠结了 :-) - parsifaljavap -c MyClass
- parsifal