2012-06-13 10 views
13

私は2つのStringBuilderオブジェクトを持っています。それらをJavaで比較する必要があります。私は私が行うことができます知っている 一つの方法は、StringBuilderオブジェクトを比較する効率的な方法

sb1.toString().equals(sb2.toString()); 

ですが、それは私は2つのStringオブジェクトを作成しています意味、StringBuilderのオブジェクトを比較するために任意のより良い方法があります。おそらくあなたは追加のオブジェクトを作成する必要はありません何か?

+6

「StringBuilder」は、独自の「equals」メソッドを宣言していないことに驚いています。 – Jeffrey

+0

あなたがやっていることは、大規模な 'String'オブジェクトを超えて、これを行うための最良の方法です。 –

答えて

26

あなたは明らかに既に知っているように、StringBuilderjava.lang.Objectからequals()継承し、StringBuilder.equals()なリターン真と引数と同じオブジェクトを渡されたときだけ。 はありませんは2つの内容を比較しますStringBuilder

ソースを見ると、最も効率的な比較(新しいオブジェクトの作成を伴わない)は.length()の戻り値を比較し、それが同じ場合は各文字の戻り値はcharAt(i)です。

+0

これはまさにsb1.equals(sb2)の機能です。 – jjm

+12

いいえ、まったく、完全に**はありません。** –

+0

@jjm:ソースコードへのリンクがありますので、確認できますか? – Gabe

3

2つのStringBuilderオブジェクトは決して等しくありません。 .toString()を使用して両方のオブジェクトの文字列表現を取得し、.equals()を使用してオブジェクトを比較します。この方法でStringクラスのequals()メソッドが呼び出され、メモリの場所を比較するのではなく、オブジェクトの文字列の値を比較します。

StringBuilder a= new StringBuilder("HELLO JAVA"); 
StringBuilder b= new StringBuilder("HELLO JAVA"); 
if (a.toString().equals(b.toString())){ 
System.out.println("Objects are equal"); 
} 
+0

しかし、これは効率的ではありません新規のStringインスタンスを作成します。 – alobodzk

0

文字列のcontentEquals()メソッドを使用できます。

StringBuilder s = new StringBuilder("abc"); 
StringBuilder t = new StringBuilder("def"); 

if(s.contentEquals(new String(t)) { 
    System.out.println("Same"); 
} 
+0

は、StringBuilderではなくStringである必要があります。 –

関連する問題