V6013. Comparison of arrays, strings, collections by reference. Possibly an equality comparison was intended.
Анализатор обнаружил ситуацию, когда строки/массивы/коллекции сравниваются через оператор '=='. Скорее всего подразумевалось сравнение содержимого, а на самом деле происходит непосредственное сравнение ссылок на объекты.
Рассмотрим пример некорректного сравнения строк:
if (str1 == "example") {}
if (str1 == str2) {}
В рассматриваемых случаях, если содержимое 'str1' и 'str2' будет совпадать и равно "example", то условия будут ложными, так как оператор '==' сравнивает адреса объектов, а не содержимое строк. Если необходимо сравнивать строки по содержимому, то корректный вариант кода примет следующий вид:
if (str1.equals("example")) {}
if (str1.equals(str2)) {}
Рассмотрим пример некорректного сравнения массивов:
int[] a = ...;
int[] b = ...;
...
if (a.equals(b)) { ... }
Для массивов вызов метода 'equals' тоже самое, что и оператор '=='. Сравниваются адреса объектов, а не содержимое. Для того, чтобы сравнивать массивы по содержимому, необходимо код переписать следующим образом:
if (Arrays.equals(a ,b){ ... }
С коллекциями оператор '==' ведет себя также, как с массивами и строками.
Данная диагностика классифицируется как:
|
Взгляните на примеры ошибок, обнаруженных с помощью диагностики V6013. |