Разница между нулем!= что-то и что-то!= ноль
Есть ли разница между null != something
а также something != null
на Яве. И если есть разница, то какой я должен использовать и почему?
7 ответов
Там нет разницы между null != something
а также something != null
, Вы должны думать о person.getName().equals("john")
и "john".equals(person.getName())
Разница: первый бросит NullPointerException
если getName()
возвращается null
а второй не будет. Но это не относится к примеру вашего вопроса.
Вероятно, это происходит из так называемых условий йода, где вы пишете "bla" == myVariable
вместо myVariable == "bla"
потому что это может случиться случайно написать myVariable = "bla"
который возвращает "bla" в некоторых языках, но также присваивает "bla" myVariable
Я просто хочу указать, что обоснование "условия Йоды" для этого (в таких языках, как C & C++) не применимо в данном случае (Java).
Java не позволяет использовать общие выражения в качестве операторов, поэтому оба
something == null;
а также
null == something;
были бы ошибки компиляции.
Типы
something == null
а такжеsomething = null
разные; логический и некоторый ссылочный тип соответственно. В этом случае это означает, что оба:if (something = null) { ... }
а также
if (null = something) { ... }
были бы ошибки компиляции.
На самом деле, я не могу придумать реалистичный пример, где null == something
будет ошибка компиляции и something == null
не будет. Следовательно, это ничего не дает с точки зрения защиты от ошибок.
С точки зрения производительности не будет никакой разницы, обе стороны оператора выполнены любым способом. Но для более читабельного кода второй кажется более читабельным
obj.getSomething().getAnotherThing().doSomething() != null
null != obj.getSomething().getAnotherThing().doSomething()
Но если вы собираетесь просто сравнить переменную или параметр, это более читабельно
something != null
Конечно, это зависит от чувства читателя.
Разницы нет, но некоторые люди используют ее для удобства чтения в своем коде.
В Java, если мы сравниваем любые, всегда мы должны размещать переменные слева, а значения - справа...