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(...) 调用。