EN JP CN

JD.EQ.ARR

JD.EQ.ARR

JD.EQ.ARR は、2 つの配列が equals() メソッドで比較されている場合に報告されます。

脆弱性とリスク

配列上で呼び出された equals() メソッドは、'==' 演算子と同一の演算を行い、配列そのものではなく、参照の比較を行います。これは、おそらくエラーです。ディープ配列比較が必要です。

軽減と防止

このメソッド呼び出しをディープ配列比較 Arrays.equals(arr1,arr2) の呼び出しに変更するか、直接参照比較 arr1==arr2 を使用してください (ただし、オブジェクトがまったく同一の場合のみ)。

例 1

9          static class MyClass {
10              String names[];
11              public boolean equals(Object o) {
12                      if (!(o instanceof MyClass))
13                              return false;
14                  MyClass m = (MyClass)o;
15                      return this.names.equals(m.names);
16              }
17      }

JD.EQ.ARR が 15 行目の 'equals' の呼び出しに対して報告されています。'equals' メソッドを使用して配列が比較されています。配列の場合、'equals' は配列内容の値ではなく、2 つの配列の ID を比較します。たぶん、java.util.Arrays.equals(...) の呼び出しに置き換える必要があります。

関連チェッカー