CodeQL 文档

数组上的 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

单击以在 CodeQL 存储库中查看查询

数组上的 equalshashCode 方法仅考虑对象标识,而不考虑数组内容,这不太可能是预期结果。

建议

要比较数组的长度和数组中相应元素对,请使用 java.util.Arrays 中的比较方法之一

  • 方法 Arrays.equals 执行浅层比较。也就是说,使用 equals 比较数组元素。

  • 方法 Arrays.deepEquals 执行深度比较,这适用于嵌套数组的比较。类似地,Arrays.hashCodeArrays.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));
}

参考

  • ©GitHub, Inc.
  • 条款
  • 隐私