2010-04-24 10 views
14

Ho un problema di cui sono piuttosto confuso. Ho le seguenti righe di codice nella mia applicazione Android:Le stringhe non sembrano essere uguali in Java su Android, anche se stampano lo stesso

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

Quando guardo l'uscita della prima istruzione println si presenta in LogCat come "start" (senza le virgolette ovviamente). Ma poi, quando l'istruzione if viene eseguita, passa alla dichiarazione else e stampa "No it does not".

Mi chiedevo se il nome del nodo potesse contenere un tipo di carattere non stampabile, quindi ho controllato la lunghezza della stringa proveniente da getNodeName() ed è lunga 5 caratteri, come ci si aspetterebbe .

Qualcuno ha idea di cosa sta succedendo qui?

risposta

44

Utilizzare il metodo equals di String per confrontare le stringhe. L'operatore == confronterà solo i riferimenti agli oggetti.

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

Quale sarà il risultato di 'CurrentNode.getNodeName(). ToString(). Equals (" start ") ==" start ".equals (CurrentNode.getNodeName(). ToString()'? –

+0

@MohammedShareefC I ' D aspettatevi 'true', ma potete provarlo per scoprirlo –

+0

yup, mi dispiace essere troppo pigro –

7

è necessario utilizzare .equals

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

Utilizzare CurrentNode.getNodeName().toString().equals("start").

In Java, uno degli errori più comuni che i nuovi utenti incontrano utilizza == per confrontare le stringhe. Devi ricordare, == confronta l'oggetto identità (Pensa agli indirizzi di memoria), non il contenuto .

+0

grazie mille per questa spiegazione .. Ho sprecato ore preziose chiedendomi perché il diavolo == non funziona – imin

Problemi correlati