2012-06-13 23 views
13

Eh, iki StringBuilder nesnesi var, bunları Java'da karşılaştırmam gerekiyor. Ben yapabileceğimi biliyorum bir yoluStringBuilder nesnelerini karşılaştırmanın etkili bir yolu nedir

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

ama bu StringBuilder nesneleri karşılaştırmak için daha iyi bir yol yoktur Yani, iki String nesneleri oluşturma anlamına gelir. Muhtemelen ek nesneler oluşturmaya gerek duymadığınız bir şey var mı?

+6

'StringBuilder'ın kendi' equals' yöntemini bildirmediğine şaşırdım. – Jeffrey

+0

Yaptığınız şey, bunu yapmak için en iyi yol, büyük 'String' nesnelerini aşmak. –

cevap

26

görünüşe göre zaten bildiği gibi, StringBuilderjava.lang.Object dan equals() devralır ve StringBuilder.equals() böyle döner doğru gibi bir argüman olarak aynı nesneyi geçirilen yalnızca. değil iki StringBuilder s içeriğini karşılaştırın!

Kaynağa bakarsanız, en verimli karşılaştırmanın (yeni nesneler oluşturmayı içermeyen) .length() dönüş değerlerini karşılaştırmak olacağını ve sonra aynıysa, her karakter için charAt(i) döndürme değerleri.

+0

Bu tam olarak ne sb1.equals (sb2) yapar. – jjm

+12

Hayır, kesinlikle, tamamen, ** YAPILMAZ. ** –

+0

@jjm: Kaynak koduna bir bağlantınız var mı? – Gabe

3

İki StringBuilder nesnesi asla eşit değildir. Nesneleri hem dize temsili almak için .toString() kullanın ve sonra nesneleri karşılaştırmak için .equals() kullanın. Bu şekilde, String sınıfındaki equals() yöntemi, bellek konumunu karşılaştırmak yerine nesnelerin dize değerini karşılaştıran çağrılır.

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

Ama bu sizin için verimli değil. yeni bir String örneği oluşturulsun. – alobodzk

0

Dize'nin contentEquals() yöntemini kullanabilirsiniz.

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

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

s bir StringBuilder değil bir String olması gerekiyor. –

İlgili konular