Два оператора IF относительно одного оператора И
В java мне интересно, какой из них более эффективен:
if(something)
{
if(something)
}
или
if((something) &&(something))
Мне было интересно, каковы достоинства для производительности. Какие решения лучше подходят для разных объектов данных.
Ответы
Ответ 1
Производительность будет одинаковой. Первый оператор будет оценен, и только если он будет истинным, будет оценен второй.
Это просто вопрос читаемости. Если есть что-то, что нужно сделать, если первое утверждение истинно, независимо от второго, я бы пошел с обоими в той же строке, что яснее, что оба утверждения должны быть истинными, чтобы что-то произошло. Вам также необязательно делать отступ без необходимости.
Ответ 2
В Java, &&
короткие замыкания. Это означает, что если первое условие в a && b
оценивается как false
, второе условие даже не оценивается.
Следовательно, они почти наверняка приводят к идентичному коду, и нет разницы в производительности.
Из двух форм вы должны использовать любые результаты с более четким кодом.
Ответ 3
В целом они одинаковы. Если первое оценивается как ложное, второе не будет оцениваться. Если вы хотите, чтобы что-то произошло, если первое ложное, вы должны использовать отдельный if-statement. В противном случае, если вы хотите только убедиться, что оба являются истинными и ничего не делают, если один из них возвращает false, вы можете использовать второй вариант.
Ответ 4
Обратите внимание, что оператор &&
в Java является оператором короткого замыкания. Это означает, что если выражение в левой части &&
равно false
, Java не будет пытаться оценить выражение в правой части, потому что результат будет false
, независимо от того, что выражение правой стороны оценивается.
Таким образом, эффективность этих двух конструкций будет одинаковой.
Обратите внимание, что Java также имеет оператор &
. Это не короткое замыкание: оно всегда будет оценивать выражения с обеих сторон &
.
Ответ 5
Я не знаю, но, по интуиции, я думаю, что после компиляции в байт-код нет никакой разницы...