同じ下線文字列を持つ2つのStringBuilderオブジェクトを比較するとfalse
、値がtrueである必要がある場合でもが返されます。
public class Test {
public static void main(String [] args) {
StringBuilder strBld_1 = new StringBuilder("string");
StringBuilder strBld_2 = new StringBuilder("string");
System.out.println(strBld_1.equals(strBld_2));
}
}
これは、クラスのメソッドをStringBuilder
オーバーライドしないためです。equals
Object
両方のStringBuilder
オブジェクトをに変換してからString
比較する必要があります
System.out.println(strBld_1.toString().equals(strBld_2.toString()));
これにより、正しい結果が得られます。明らかに、nullチェックなどを気にする必要があります。
equals
規約によると、equalsをオーバーライドする場合はオーバーライドするhashCode
必要がありますが、StringBuffer
変更可能であるため、値を変更するとオブジェクトのハッシュコードに影響します。これをキーとして使用HashMap
すると、格納された値が失われる可能性がありStringBuilder
ます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加