(obj == null) vs (null == obj)?
Мой босс сказал, что я должен использовать null == obj
, потому что он лучше, чем obj == null
, но он не помнил, зачем это делать. Есть ли причина для использования null == obj
?
Я чувствую это как-то... напротив!
После некоторого поиска в Google единственное, что я нашел, это:
в C, это предотвращает случайное изложение (obj = null) в условной структуре.
Ответы
Ответ 1
Вы не можете случайно назначить null
на obj
, набрав obj = null
. Однако, что воспоминание из C раз, в java, это невозможно, так как выражение =
возвращает правую часть задания. Поскольку null
не является boolean
, компилятор будет жаловаться.
Я попытался бы объяснить это моему боссу один раз, продемонстрировать его. Если он все еще не согласен с вами, просто сделайте это. Это мелочь, чтобы сражаться с вашим боссом.
Ответ 2
Если вы скомпилируете файл с if(null==obj)
, сгенерированный байт-код if_acmpne
, а в случае if(obj==null)
- ifnonnull
. Теперь в if_acmpne
два операнда выходят из стека и проверяют, что они не равны (в данном случае null
и obj
), а в ifnonnull
только один операнд выставляется и проверяется, если он не равен нулю. Из этого кажется, что ifnonnull
лучше, поскольку он включает в себя только один операнд.
Ссылки: http://www.artima.com/underthehood/flowP.html
Ответ 3
В Java нет разницы.
Я предпочитаю (obj == null), поскольку он чувствует себя более естественным.
Ответ 4
Я никогда не слышал об этом раньше, но кажется, что аргументация, которую вы дали, прочная. Я также думаю, что он чувствует себя в обратном направлении, но у него не должно быть никаких проблем, кроме "чувства". Я не думаю, что это принесло бы какие-либо выгоды от производительности или что-то в этом роде.
Ответ 5
Если вы передаете условие как таковое if (obj=null)
или if (null=obj)
в настоящее время java IDE, оно будет выделять его как синтаксическую ошибку. Кроме того, попытка компиляции сигнализирует об ошибке.
Оба (obj==null)
и (null==obj)
допустимы, оба они несут одни и те же накладные расходы, а позже не дают никакой производительности. Решение использовать либо зависит от стиля кода, принятого для поддержания единообразного стиля между классами.