4

この問題は私を狂わせています!次のように、定数クラスで静的文字列を宣言しました。

public static final String REGISTRATION_USERNAME_TAKEN = "Username is already in use. Please choose a different name.";

ユーザーを登録するためにRESTfulWebサービスを呼び出した後、応答(デバッグ中)がキャッチされ、定数と比較されます。結果と定数の両方がまったく同じに見えても、応答は二重引用符で囲まれ(理由はわかりません)、result.equals()は失敗します。以下は、Eclipseでのデバッグ中の画面キャプチャで、二重引用符が表示されています。61の文字数には、1セットの二重引用符が含まれます。

Eclipseでこれを見た人はいますか?また、両方の文字列が同じ値である場合(つまり、両方の文字列に同じシーケンスで同じ文字が含まれている場合)、.equals()が失敗するのはなぜですか?

ここに画像の説明を入力してください

4

1 に答える 1

0

String を enum 定数と比較するときに .equals() メソッドが失敗することに関して、実際には、enum クラスで toString() メソッドをオーバーライドしなかった場合のデフォルトの動作です。

例:

public MyEnum
{
  LIL, LOL
}

//try inside main method
String result = "LOL";

if(result.equals(MyEnum.LOL))
System.out.println("true");
else
System.out.println("false"); //will print false

したがって、文字列を列挙が持つ可能性のある正確な文字列値と比較する場合は、コンストラクター内で定義する対応する文字列値を保持する列挙にプライベート フィールドを追加し、toString() をオーバーライドして返すことができます。列挙内で、またはこれを行うだけで toString() の使用を強制できます:

if(result.equals((MyEnum.LOL).toString())
//same code as before would print true
于 2012-08-01T14:32:40.903 に答える