Сравнение значения объекта с нулем - PullRequest
2 голосов
/ 30 мая 2019

Литерал null может быть назначен только ссылочным переменным, и обычно мы используем метод .equals() при сравнении с ними

Почему мы используем операторы "равно" и "не равно"на "вместо .equals() метода, если имеет дело с нулем?

Ответы [ 3 ]

3 голосов
/ 30 мая 2019

equals - это метод, означающий, что вы не можете вызвать его по ссылке null (хотя вы можете вызвать myVariable.equals(aVariableThatIsNull), и он должен вернуть false).

Вы можете использовать java.util.Objects#equals(Object, Object), чтобы очистить ваш код и, казалось бы, обрабатывать нулевые безопасные проверки на равенство.

1 голос
/ 30 мая 2019

Существует три причины в следующем порядке важности:

  1. Стабильность - Боязнь NullPointerException, которая наверняка произойдет, если вы попытаетесь получить доступequals() метод объекта, который содержит значение null.Это довольно очевидно, но все же должно было быть упомянуто в качестве основной причины.

  2. Видимость - Однако, даже если бы мы могли это сделать, это не вызвало бы исключениявсе равно не будет более предпочтительным, чем использование оператора ==.Зачем?Потому что оператор визуально разделяет элементы, делая более понятным, что на самом деле сравнивается.Когда мы сравниваем с null, мы хотим, чтобы он был четким и видимым в коде.

  3. Согласованность - Метод равенства используется для содержимогосравнение , в то время как оператор == используется для сравнения адресов .Так как null не имеет адреса, потому что он не существует, наиболее логически непротиворечивым было бы сначала сравнить отсутствие адреса, а затем перейти к сравнению фактического содержимого двух объектов (что и делает equals()).

0 голосов
/ 30 мая 2019

Метод "equals ()" является методом экземпляра, и для вызова любого метода экземпляра вам нужна ненулевая ссылка на объект.Таким образом, вызов equals () с нулевой ссылкой приведет к NPE.

Если метод статический, то вы можете также вызвать этот метод с нулевой ссылкой, так как статический метод не связан ни с одним экземпляром.

...