JD.EQ.ARR

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

脆弱性とリスク

配列上で呼び出された 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);
              }
      }

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

関連チェッカー