0

次のように2つのStringBufferを作成しました

StringBuffer buffer1 = new StringBuffer("Text");
StringBuffer buffer2 = new StringBuffer(buffer1);

それらのStringBufferをequalsメソッドと比較すると、falseが返されますか?

if (buffer1.equals(buffer2))
    System.out.println("true");
else
    System.out.println("false");

equals()は文字列の内容を比較するので、ここでfalseを返す理由はわかりません...

この問題から抜け出すように案内してください。

4

3 に答える 3

5

StringBuffer.equals()文字列の内容を比較しません。あなたはしなければなりませんtoString().equals()

于 2012-04-26T10:00:32.197 に答える
3

を使用する必要がありますtoString()

if (buffer1.toString()
          .equals(buffer2.toString()))
      System.out.println("true");
else
      System.out.println("false");
于 2012-04-26T10:02:19.353 に答える
3

テキストではなくオブジェクトを比較しています。buffer1はbuffer2とは異なります

equalsメソッドのJDKリファレンスを読み取る

equalsメソッドは、null以外のオブジェクト参照に同値関係を実装します。

これは再帰的です。null以外の参照値xの場合、x.equals(x)はtrueを返す必要があります。これは対称的です。null以外の参照値xおよびyの場合、y.equals(x)がtrueを返す場合に限り、x.equals(y)はtrueを返す必要があります。これは推移的です。null以外の参照値x、y、およびzの場合、x.equals(y)がtrueを返し、y.equals(z)がtrueを返す場合、x.equals(z)はtrueを返す必要があります。一貫性があります。null以外の参照値xおよびyの場合、オブジェクトのequals比較で使用される情報が変更されていない限り、x.equals(y)を複数回呼び出すと常にtrueが返されるか、常にfalseが返されます。null以外の参照値xの場合、x.equals(null)はfalseを返す必要があります。クラスObjectのequalsメソッドは、オブジェクトに対して可能な限り最も識別力のある同値関係を実装します。つまり、null以外の参照値xおよびyの場合、

通常、hashCodeメソッドの一般的なコントラクトを維持するために、このメソッドがオーバーライドされるたびにhashCodeメソッドをオーバーライドする必要があることに注意してください。これは、等しいオブジェクトには等しいハッシュコードが必要であると述べています。

于 2012-04-26T10:04:54.680 に答える