JD.EQ.ARR

当通过 equals() 方法比较两个数组时,报告 JD.EQ.ARR。

漏洞与风险

在数组上调用的方法 equals() 与“==”运算符的运算方式相同,需要比较的是引用,而非数组本身。这也许是一种错误;需要执行深入的数组比较。

缓解与预防

将此方法调用改为深入数组比较 Arrays.equals(arr1,arr2) 调用,也可以使用直接引用比较 arr1==arr2(但该方法仅适用于对象完全相同的情况。)

示例 1

复制
          static class MyClass {
              String names[];
              public boolean equals(Object o) {
                      if (!(o instanceof MyClass))
                              return false;
                  MyClass m = (MyClass)o;
                      return this.names.equals(m.names);
              }
      }

针对第 15 行的 equals 调用报告 JD.EQ.ARR:使用“equals”方法比较数组。对于数组,equals 比较的是两个数组的标识,而不是数组内容的值。或许应替换为 java.util.Arrays.equals(...) 调用。

相关检查器