# V6058. Comparing objects of incompatible types.

Анализатор обнаружил потенциальную ошибку, связанную с вызовом функции сравнения для несовместимых по типу объектов. Анализатор выдает предупреждения на некорректное использование таких функций как equals, assertEquals, assertArrayEquals и т.д.

Разберем ошибочные случаи сравнения:

Пример 1:

    String param1 = ...;
    Integer param2 = ...;
    ...
    if (param1.equals(param2))
    {...}

Пример 2:

    List<String> list = Arrays.asList("1", "2", "3");
    Set<String> set = new HashSet<>(list);
    if (list.equals(set))
    {...}

В обоих примерах сравниваются объекты с несовместимыми типами. Результат их сравнения всегда будет false, так как в реализациях 'equals' есть проверка на соответствие пришедшего объекта с текущим.

Для String:

    public boolean equals(Object anObject)
    {
      ...
      if (anObject instanceof String)
      {
         ...
      }
      return false;
    }

Для List:

    public boolean equals(Object o)
    {
      ...
      if (!(o instanceof List))
          return false;
      ...
    }

Если V6058 в вашем коде, то скорее всего это ошибка, и сравнивать надо другие объекты.

Пример 1:

    ...
    String param1 = ...;
    String param3 = ...;
    ...
    if (param1.equals(param3))
    {...}

Пример 2:

    ...
    List<String> list = Arrays.asList("1", "2", "3");
    List<String> list2 = ...;
    ...
    if (list.equals(list2))
    {...}

Данная диагностика классифицируется как:

CWE-1024

Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6058.