0

なぜ間違った出力を出力するのですか?

ArrayList<String> loc = new ArrayList<String>();

この配列リストには、次の値が格納されています。

[topLeft, topLeft, topLeft, bottomLeft, topLeft, bottomLeft, topLeft, topLeft, Left, topLeft]

最初のインデックス0は=topLeft

if(loc.get(1)=="topLeft")
   System.out.println("same")

else {
   System.out.println("not same")
}

not sameこのプログラムは、代わりに間違った出力を出力しますsame

4

2 に答える 2

3

たとえばequals(Object)、演算子ではなくメソッドを使用します==loc.equals("topLeft")

==2つの参照がメモリ内の同じオブジェクトを指している場合、演算子はtrueを返します。equals(Object o)メソッドは、2つのオブジェクトが同等であるかどうかをチェックするため、2つの文字列に同じ順序で同じ文字のみが含まれている場合はtrueを返します。

于 2010-03-28T20:29:37.223 に答える
1

str1.equals(str2)文字列の比較は、 を使用するのではなく、 を呼び出すことによって行われ==ます。

  • equals(..)文字列の内容を比較します
  • ==参照を比較しますが、それらは同じではありません。

ただし、もう少し知っておくべきことがあります。Stringリテラルとして初期化されるオブジェクト、つまり

String str = "someString"

構築 ( ) を経由する代わりに、String str = new String("some")すべて同じオブジェクトです。彼らにとって==はうまくいくでしょう。

そして最後に、任意の に対してString、 を呼び出すと、同じ内容を持つ他のすべての文字列と同じオブジェクトであるintern()a が返されます。String(intern()詳細については、 のドキュメントを参照してください)

ただし、ここでのベスト プラクティスはequals()、呼び出しているオブジェクト (最初の文字列) が でない場合に注意しながら、を使用することですnull

于 2010-03-28T20:33:54.110 に答える