﻿# V6013\. Comparison of arrays, strings, collections by reference\. Possibly an equality comparison was intended\.

Анализатор обнаружил ситуацию, когда строки/массивы/коллекции сравниваются через оператор '\=\='\. Скорее всего подразумевалось сравнение содержимого, а на самом деле происходит непосредственное сравнение ссылок на объекты\.

Рассмотрим пример некорректного сравнения строк:

```cpp
if (str1 == "example") {}
if (str1 == str2) {}
```

В рассматриваемых случаях, если содержимое 'str1' и 'str2' будет совпадать и равно "example", то условия будут ложными, так как оператор '\=\=' сравнивает адреса объектов, а не содержимое строк\. Если необходимо сравнивать строки по содержимому, то корректный вариант кода примет следующий вид:

```cpp
if (str1.equals("example")) {}
if (str1.equals(str2)) {}
```

Рассмотрим пример некорректного сравнения массивов:

```cpp
int[] a = ...;
int[] b = ...;
...
if (a.equals(b)) { ... }
```

Для массивов вызов метода 'equals' тоже самое, что и оператор '\=\='\. Сравниваются адреса объектов, а не содержимое\. Для того, чтобы сравнивать массивы по содержимому, необходимо код переписать следующим образом:

```cpp
if (Arrays.equals(a ,b){ ... }
```

С коллекциями оператор '\=\=' ведет себя также, как с массивами и строками\.

![V6013_ru/image1.png](https://import.viva64.com/docx/blog/V6013_ru/image1.png)

Вы нашли спрятанный ссееккрреетт и, возможно, успеете забрать один из ппррииззоовв\. [Подробнее](https://pvs-studio.ru/ru/rules/)\.