CMP.STR

この警告は、String 型の文字列そのものではなく、文字列参照が比較されている場合に表示されます。

脆弱性とリスク

この問題は、予期しないアプリケーションの挙動を生じる可能性があります。通常、== を使用してオブジェクトを比較すると、誤解を招く結果となります。演算子 == は、値ではなく、オブジェクト参照を比較するためです。文字列に対して == を使用する場合、プログラマーは、これらが定数文字列であることや、同じクラスで静的に作成されたこと、intern() メソッドを使用して比較する前に "インターン" されたことなどを確認する必要があります。

軽減と防止

オブジェクトの比較には、== 演算子ではなく、equals() メソッドを使用してください。

例 1

コピー
     /**
      *  Return symbolic name of operation
      */
     public String nameOperation(String key) {
         if (key == "++") return "PLUS";
         if (key == "--") return "MINUS";
         return "UNKNOWN";
     }

CMP.STR が 14 行目に対して報告されています。文字列 'key' と '++' が == で比較されています。CMP.STR が 15 行目に対して報告されています。文字列 'key' と '--' が == で比較されています