1

私は2つのリストトークンとコードを持っています。それらは大丈夫です。しかし、2を比較しようとすると、ループで別々に印刷されたときに同じ文字列コンテンツを印刷したにもかかわらず、常にfalse値が生成されます。アイデア/回避策はありますか?

System.out.println(token.get(i).toString().equals(chords.get(j).toString()));

どちらもListとして宣言され、ArrayList()として初期化されます。

どちらにもStringオブジェクトが含まれています。

while (i < tokenLength) {
    System.out.println("");
    int j = 0;
    while (j < numberOfChords) {
        System.out.println(token.get(i).toString() + " compares "
                + chords.get(j).toString());
        System.out.println(token.get(i).toString()
                .equals(chords.get(j).toString()));
        if (token.get(i).toString() == chords.get(j).toString()
                && token.get(i).toString().length() <= maxLengthOfChord) {

            foundChord.add(token.get(i));
        }
        j++;
    }
    i++;
}

次の出力が得られます。 ここに画像の説明を入力してください

私もこれを試しました

System.out.println(token.get(i).toString().equals(chords.get(j).toString()));

スクリーンショットに示されているのと同じ結果を返すfalseが常に生成されます

4

5 に答える 5

2

この時点までにすべてを実行しました。

if (token.get(i).toString() == chords.get(j).toString()

equalsメソッドを使用する必要がありますが、==

于 2013-03-21T18:57:46.617 に答える
1

なぜfalseと表示されるのかは言えませんが、これは間違いなく間違っています。

    if (token.get(i).toString() == chords.get(j).toString()

その行をに変更します

    if (token.get(i).trim().equals(chords.get(j).trim())

等式(equals())はアイデンティティ(==)と同じではありません。

于 2013-03-21T18:57:33.410 に答える
1

これにより、値ではなく参照が比較されます。

token.get(i).toString() == chords.get(j).toString()

あなたはしなければならない:

token.get(i).toString().equals(chords.get(j).toString())
于 2013-03-21T18:58:38.460 に答える
1

現在のコードの問題が正確に何であるかはわかりませんが、少し単純化することに賛成しました...

for (String t : token) {
  for (String c : chords) {
    System.out.println(t + " compares " + c);
    System.out.println(t.equals(c));
    if (t.equals(c)) {
      foundChord.add(t);
    }
  }
}

私が正しく理解していれば、現在のコードが達成しようとしていることを実行する必要があり、エラーなしで機能するはずです。

于 2013-03-21T19:09:10.053 に答える
0

toString()は、デフォルトでオブジェクトのハッシュコードを出力します。このハッシュコードはすべてのオブジェクトに固有であるため、他のオブジェクトのハッシュコードと一致することはなく、それらを比較すると(オブジェクトが類似している場合でも)結果はfalseになります。期待される結果を得るには、toString()メソッドをオーバーライドする必要があります。toStringメソッドからインスタンス変数の値を返すことができるかもしれません

于 2013-03-21T18:47:01.937 に答える