数组上的 Equals 或 hashCode¶
ID: java/equals-on-arrays
Kind: problem
Security severity:
Severity: error
Precision: very-high
Tags:
- reliability
- correctness
Query suites:
- java-security-and-quality.qls
数组上的 equals
和 hashCode
方法仅考虑对象标识,而不考虑数组内容,这不太可能是预期结果。
建议¶
要比较数组的长度和数组中相应元素对,请使用 java.util.Arrays
中的比较方法之一
方法
Arrays.equals
执行浅层比较。也就是说,使用equals
比较数组元素。方法
Arrays.deepEquals
执行深度比较,这适用于嵌套数组的比较。类似地,Arrays.hashCode
和Arrays.deepHashCode
可用于根据各个数组元素的哈希码计算浅层和深度哈希码。
示例¶
在以下示例中,首先使用 Object.equals
方法比较这两个数组。由于这仅检查引用相等性,并且这两个数组是不同的对象,因此 Object.equals
返回 false
。然后使用 Arrays.equals
方法比较这两个数组。由于这比较数组的长度和内容,因此 Arrays.equals
返回 true
。
public void arrayExample(){
String[] array1 = new String[]{"a", "b", "c"};
String[] array2 = new String[]{"a", "b", "c"};
// Reference equality tested: prints 'false'
System.out.println(array1.equals(array2));
// Equality of array elements tested: prints 'true'
System.out.println(Arrays.equals(array1, array2));
}