Подтвердить что ты не робот

(obj == null) vs (null == obj)?

Мой босс сказал, что я должен использовать null == obj, потому что он лучше, чем obj == null, но он не помнил, зачем это делать. Есть ли причина для использования null == obj?
Я чувствую это как-то... напротив!

После некоторого поиска в Google единственное, что я нашел, это:

в C, это предотвращает случайное изложение (obj = null) в условной структуре.

4b9b3361

Ответ 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) допустимы, оба они несут одни и те же накладные расходы, а позже не дают никакой производительности. Решение использовать либо зависит от стиля кода, принятого для поддержания единообразного стиля между классами.