14

私はかなり混乱している問題を抱えています。Android アプリケーションに次のコード行があります。

System.out.println(CurrentNode.getNodeName().toString());
if (CurrentNode.getNodeName().toString() == "start") {
    System.out.println("Yes it does!");
} else {
    System.out.println("No it doesnt");
}

最初のprintlnステートメントの出力を見ると、LogCatに「開始」として表示されます(明らかに引用符なし)。しかし、if ステートメントが実行されると、else ステートメントに移動し、「いいえ、そうではありません」と出力されます。

ノードの名前に何らかの非表示文字が含まれているのではないかと考えたので、getNodeName() からの文字列の長さを確認したところ、予想どおり 5 文字でした。

ここで何が起こっているのか誰にもわかりませんか?

4

3 に答える 3

44

String のequalsメソッドを使用して、String を比較します。演算子は、==オブジェクト参照を比較するだけです。

if ( CurrentNode.getNodeName().toString().equals("start") ) {
   ...
于 2010-04-24T15:24:32.463 に答える
13

を使用しCurrentNode.getNodeName().toString().equals("start")ます。

Java で初心者が遭遇する最も一般的な間違いの 1 つは、==文字列の比較に使用することです。コンテンツではなく、オブジェクトのアイデンティティ(メモリアドレスを考える)を==比較することを覚えておく必要があります。

于 2010-04-24T15:25:23.087 に答える
7

.equals を使用する必要があります

if ("start".equals(CurrentNode.getNodeName().toString()) { ... }
于 2010-04-24T15:24:43.260 に答える