﻿# V6133\. Dereferencing the parameter without a null check\. Passing the 'null' value to the 'equals' method should not cause 'NullPointerException'\.

Анализатор обнаружил, что в переопределённом методе equals отсутствует проверка аргумента на null, что нарушает стандартный контракт\.

Рассмотрим пример:

```cpp
@Override
public boolean equals(Object object) {
  if (this == object) {
    return true;
  }

  if (getClass() != object.getClass()) {
    return false;
  }

  Foo another = (Foo) object;
  return type.equals(another.type) &&
         name.equals(another.name);
}
```

В методе `equals` реализована проверка на совпадение классов и сравнение полей\. Однако разработчик не учёл вариант, что в качестве аргумента может поступить нулевая ссылка\. Это приведёт к выбросу исключения [`NullPointerException`](https://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html) в момент вызова [`getClass`](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--)\.

Согласно документации переопределение метода [`Object.equals`](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/Object.html#equals(java.lang.Object)) должно возвращать `false` при передаче нулевой ссылки, а не генерировать исключение\. Это особенно важно в случае, если класс используется в коллекциях\.

Исправленный вариант:

```cpp
@Override
public boolean equals(Object object) {
  if (this == object) {
    return true;
  }

  if (object == null || getClass() != object.getClass()) {
    return false;
  }

  Foo another = (Foo) object;
  return type.equals(another.type) &&
         name.equals(another.name);
}
```