を に変換する必要があるたびに、またはを選択int
しました。ここで、どちらの方法が速いのか疑問に思ったので、function_1、function_2、および function_3 を 10000000 回呼び出し、関数の処理にかかる時間を出力する簡単なベンチマークを作成しました。関数は次のとおりです。String
""+a
Integer.toString(a)
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)