Я ожидаю, что второй будет быстрее, так как он делает меньше сравнений.Однако разница настолько мала, что временные результаты будут очень зависеть от того, как вы оцениваете.
Я бы остановился на том, что вы считаете самым ясным и простым, и JVM, вероятно, оптимизирует это лучше всего.
РЕДАКТИРОВАТЬ: проблема с микро-бенчмаркингом заключается в том, что то, как вы тестируете, может повлиять на результаты.имеет большое значение.
Гораздо важнее, чем задействованные операции, является оптимизация числа ветвей и то, насколько хорошо будет работать предсказание ветвей.http://www.agner.org/optimize/microarchitecture.pdf
Скажем, я делаю разные значения в 25 раз более вероятными, поэтому каждый диапазон одинаково вероятен.
floats[i] = d < 0.25 ? Float.NaN :
d < 0.5 ? Float.NEGATIVE_INFINITY :
d < 0.75 ? Float.POSITIVE_INFINITY : (float) d;
Все, что это делает, это увеличивает вероятность прохождения кода по другому пути.
1,2: isFinite1 took 8.5 ns and isFinite2 took 14.2 ns on average
2,1: isFinite1 took 10.9 ns and isFinite2 took 11.5 ns on average
1,2: isFinite1 took 7.2 ns and isFinite2 took 14.4 ns on average
2,1: isFinite1 took 11.0 ns and isFinite2 took 11.5 ns on average
1,2: isFinite1 took 7.3 ns and isFinite2 took 14.2 ns on average
2,1: isFinite1 took 10.8 ns and isFinite2 took 11.5 ns on average
Повторяю, более ясный код должен быть вашей целью!;)