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' と '--' が == で比較されています