﻿# V6058\. Comparing objects of incompatible types\.

The analyzer has detected a potential error that has to do with calling a comparison function on objects of incompatible types\. This warning is triggered by such functions as equals, assertEquals, assertArrayEquals, etc\.

The following examples demonstrate incorrect use of comparison functions:

Example 1:

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

Example 2:

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

In both examples, objects of incompatible types are compared\. The comparison will always evaluate to 'false' as the implementations of 'equals' check if the type of the specified object corresponds to that of the current object\.

String:

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

List:

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

If you get a V6058 warning on your code, you are very likely to have a mistake in it and you should compare some other objects\. 

Example 1:

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

Example 2:

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