#java #performance
#java #Производительность
Вопрос:
Какой из двух вариантов лучше с точки зрения обработки или оптимизации?
Я чувствую, что вариант 1 более удобочитаем, но мне сказали, что вариант 2 более эффективен. Это так?
if (value != null) {
if (value.equalsIgnoreCase(ApplicationConstants.A)) {
} else if (value.equalsIgnoreCase(ApplicationConstants.B)) {
}
}
Вариант 2:
if ((value != null) amp;amp; (value.equalsIgnoreCase(ApplicationConstants.A))) {
} else if ((value != null) amp;amp; (value.equalsIgnoreCase(ApplicationConstants.B))) {
}
Ответ №1:
Здесь нет ничего, что заботило бы о производительности с точки зрения, напишите свой код так, чтобы он был настолько читабельным, насколько вы можете это сделать.
При последующем тестировании производительности выделяются области, которые необходимо оптимизировать тогда и только тогда, оптимизируйте только те места, которые в этом нуждаются.
Чтобы сделать его более читаемым, вы можете инвертировать свои тесты, чтобы избавиться от проверки null:
if (ApplicationConstants.A.equalsIgnoreCase(value)) {
} else if (ApplicationConstants.B.equalsIgnoreCase(value)) {
}
Комментарии:
1. 1 согласен, разница здесь настолько минимальна, что не будет иметь значения почти в 100% случаев. Оптимизируйте для удобства чтения.
2. Я бы даже поспорил, что, вероятно, вообще не будет никакой разницы после запуска hotspot optimizer.
Ответ №2:
Option 1
эффективен, поскольку нет избыточной null
проверки.
Комментарии:
1. К счастью, ifnonnull получает свой собственный код операции JVM, поэтому сравнение обходится дешево.
Ответ №3:
Я бы ожидал, что первый будет немного более эффективным, потому что amp;amp;
это короткое замыкание, поэтому в любом случае он дает несколько условных ветвей. Но если вы хотите быть уверены, засеките их время.
Ответ №4:
Я бы выбрал вариант 1, как и в варианте 2, больше никаких сравнений не производится.
Комментарии:
1. Да, и, как указал Томас, нет ничего, что называется циклами If, циклы были бы for , while, do while, для каждого и для in …
Ответ №5:
Первый вариант лучше, поскольку с помощью одной проверки условий вы можете решить. таким образом, если значение != null, то войдет только оно, иначе оно даже не войдет в условный блок. Но во 2-м варианте он проверит условие if , и если false, то также будет проверять условие else (для значения == null).