два оператора IF против одного оператора AND - PullRequest
13 голосов
/ 06 марта 2012

В Java интересно, какой из них более эффективен:

if(something)
   {
      if(something)
    }

или

if((something) &&(something))

Мне было интересно, каковы преимущества обоих с точки зрения производительности. Какие решения лучше подходят для различных объектов данных.

Ответы [ 5 ]

20 голосов
/ 06 марта 2012

Производительность будет одинаковой.Первое утверждение будет оценено, и только если оно истинно, будет оценено второе.

Это всего лишь вопрос читабельности.Если нет необходимости что-либо делать, если первое утверждение верно, независимо от второго, я бы пошел с обоими в одной строке, так как более ясно, что оба утверждения должны быть истинными, чтобы что-то произошло.Вам также не нужно делать ненужный отступ.

3 голосов
/ 06 марта 2012

В Java && короткое замыкание.Это означает, что если первое условие в a && b оценивается как false, второе условие даже не оценивается.

Следовательно, два почти наверняка приведут к идентичному коду, и разницы в производительности нет.

Из двух форм вы должны использовать все, что приводит к более ясному коду.

2 голосов
/ 06 марта 2012

Обратите внимание, что оператор && в Java является оператором короткого замыкания.Это означает, что если выражение в левой части && равно false, Java не потрудится оценить выражение в правой части, потому что результат будет false, независимо от того, чтовыражение в правой части имеет значение.

Таким образом, эффективность этих двух конструкций будет одинаковой.

Обратите внимание, что в Java также есть оператор &.Тот не замыкает накоротко: он всегда оценивает выражения с обеих сторон &.

2 голосов
/ 06 марта 2012

В целом они одинаковые. Если первый оценивается как ложный, второй не будет оцениваться. Если вы хотите, чтобы что-то произошло, если первое неверно, вы должны использовать отдельный оператор if. В противном случае, если вы хотите убедиться, что оба значения верны, и ничего не делать, если один из них возвращает ложь, вы можете использовать второй параметр.

0 голосов
/ 06 марта 2012

Не знаю, но, по интуиции, я думаю, что однажды скомпилированный в байт-код нет никакой разницы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...