эффективность обработки цикла if

#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).