5

重複の可能性:
StringBufferの内容を等しいと比較する

StringBuffer s1= new StringBuffer("Test");
StringBuffer s2 = new StringBuffer("Test");
if(s1.equals(s2)) {
  System.out.println("True");
} else {
  System.out.println("False");
}

そのコードが「False」を出力するのはなぜですか?

4

2 に答える 2

7

StringBufferはObject.equalsメソッドをオーバーライドしないため、文字列比較は実行されません。代わりに、直接オブジェクト比較を実行しています。あなたの条件は if(s1==s2) かもしれません。文字列を比較したい場合は、最初にバッファを文字列に変換する必要があります。

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/StringBuffer.htmlを参照してください。

編集: Java の世界にいると仮定しています。

psシングルスレッド環境にいる場合、またはバッファが単一のスレッドに分離されている場合は、実際には StringBuffer の代わりに StringBuilder を使用する必要あります

于 2010-02-03T13:14:12.913 に答える
3

StringBuffer equalsは、コンテンツをチェックするためにオーバーライドされません。java.lang.Objectから継承した参照を比較するデフォルトの「shallowequals」を使用しています。

于 2010-02-03T13:11:05.323 に答える