На самом деле, это вопрос, который меня интересовал ... (Я надеялся, что где-нибудь найду ответ, чтобы избежать собственного тестирования. Ну, я не ...)
Чтобы убедиться, что ваш (мой) тест действителен, вы (I) должны сделать достаточно итераций, чтобы получить достаточно данных. Каждая итерация должна быть достаточно «длинной» (я имею в виду временную шкалу), чтобы показать истинную разницу. Я обнаружил, что даже одного миллиарда итераций недостаточно, чтобы соответствовать временному интервалу, который был бы достаточно длинным ... Поэтому я написал этот тест:
for (int k = 0; k < 1000; ++k)
{
{
long stopwatch = System.nanoTime();
boolean b = false;
int i = 0, j = 0;
while (i++ < 1000000)
while (j++ < 1000000)
{
int a = i * j; // to slow down a bit
b = true;
a /= 2; // to slow down a bit more
}
long time = System.nanoTime() - stopwatch;
System.out.println("\\tasgn\t" + time);
}
{
long stopwatch = System.nanoTime();
boolean b = false;
int i = 0, j = 0;
while (i++ < 1000000)
while (j++ < 1000000)
{
int a = i * j; // the same thing as above
if (!b)
{
b = true;
}
a /= 2;
}
long time = System.nanoTime() - stopwatch;
System.out.println("\\tif\t" + time);
}
}
Я запустил тест три раза, сохранив данные в Excel, затем поменял местами первый (asgn ’) и второй (and if’) случай и повторил его три раза снова… И результат? Четыре раза «выиграл» случай «если» и два раза «asgn» оказался лучшим. Это показывает, насколько чувствительным может быть выполнение. Но в целом я надеюсь, что это также доказало, что дело «если» является лучшим выбором.
Спасибо, в любом случае…