CMP.OBJ

この警告は、オブジェクトそのものではなく、オブジェクト参照が比較されている場合に表示されます。比較されたオブジェクトが異なる型を持ち、いずれのオブジェクトも明示的なオブジェクト型を持たない場合のみエラーが生成されます。

脆弱性とリスク

この問題は、予期しないアプリケーションの挙動を生じる可能性があります。通常、== を使用してオブジェクトを比較すると、誤解を招く結果となります。演算子 == は、値ではなく、オブジェクト参照を比較するためです。文字列に対して == を使用する場合、プログラマーは、これらのオブジェクトがプログラム内で固有であることを確認する必要があります。すなわち、これらに equals メソッドが定義されていないことや、固有のオブジェクトを生成する static ファクトリを持つことを確認する必要があります。

軽減と防止

オブジェクトの比較には、== 演算子ではなく、equals() メソッドを使用してください。演算子 == を使用する場合は、パフォーマンス上の理由から、オブジェクトがコンストラクタによって作成されているのではなく、static ファクトリによって作成されていることが重要です。

例 1

コピー
      /**
      * Check that person is John 25 miner
      */
     Proffesional john = new Proffesional("John", 25, "miner");
     public boolean checkJohn(Person p) {
         return p == john;
     }

CMP.OBJ が 14 行目に対して報告されています。オブジェクト 'p' と 'john' が == で比較されています