2010-04-24 21 views
14

'u basmış olsalar bile, oldukça kafam karışmış bir sorunum var. Benim android uygulamasında aşağıdaki kod satırlarını vardır: İlk println açıklamada çıkışında baktığımızdaDizeler, Android'de Java'da eşit görünmüyor, aynı

System.out.println(CurrentNode.getNodeName().toString()); 
if (CurrentNode.getNodeName().toString() == "start") { 
    System.out.println("Yes it does!"); 
} else { 
    System.out.println("No it doesnt"); 
} 

o (besbelli tırnaklar olmadan) "start" olarak LogCat renktedir. Ama sonra if deyimi yürütürse, başka bir ifadeye gider ve "Hayır olmaz" yazdırır.

Düğüm adının içinde baskı olmayan bir karakterin bulunup bulunmadığını merak ettim, bu yüzden getNodeName() öğesinden gelen dizenin uzunluğunu kontrol ettim ve beklediğiniz gibi 5 karakter uzunluğundaydı .

Burada neler olup bittiği hakkında herhangi bir fikri olan var mı?

cevap

44

Dizeleri karşılaştırmak için String'in equals yöntemini kullanın. == operatörü yalnızca nesne referanslarını karşılaştırır.

if (CurrentNode.getNodeName().toString().equals("start")) { 
    ... 
+0

CurrentNode.getNodeName(). ToString() öğesinin sonucu ne olur? Equals ("start") == "start" .equals (CurrentNode.getNodeName(). ToString() '? –

+0

@MohammedShareefC I ' d 'true' bekliyoruz, ama bunu öğrenmek için test edebilirsiniz –

+0

yup Çok tembel olduğum için üzgünüm. –

7

Sen .equals

if ("start".equals(CurrentNode.getNodeName().toString()) { ... } 
13

Kullanım CurrentNode.getNodeName().toString().equals("start") kullanmak gerekir. Java'da

, yeni gelenler Dizeler karşılaştırmak == kullanıyor karşılamak en yaygın hatalardan biri. Sen == nesne kimliğini (bellek adreslerini düşünün) değil, içeriği karşılaştırır, hatırlamak zorunda.

+0

bu açıklama için çok teşekkür ederim .. neden heck == işe yaramadığını merak değerli saatler harcadım – imin

İlgili konular