2010-10-06 13 views
6

Ho due stringhe identiche, una in un array e una in una variabile String. Quando paragono queste stringhe IDENTICHE, ottengo false ogni volta. Ho eseguito il debug e il debug, ma ottengo lo stesso risultato ogni volta. Ecco il codice in questioneIl confronto delle stringhe identiche mi dà il falso

String temp = ""+(num1*num2); 
Boolean equal = temp == answers[i]; 

if(equal) { 
    correct[i] = true; 
    num_correct ++; 
}else{ 
    correct[i] = false; 
} 

Anche in questo caso, ho il debug ogni dettaglio minore di questo programma e sono sicuro al 101% che le stringhe sono identiche. Perché Java restituisce false al confronto?

+2

Perché stai usando un valore booleano (classe java) invece che il tipo booleano nativa? Inoltre, perché usare l'operatore == invece del metodo equals()? – SirDarius

+1

Abbiamo bisogno di una lista di dieci domande frequenti, == invece di equals si presenta sempre. –

+0

@Steve Kuo È un'ottima idea. Dovresti suggerirlo su meta se non c'è già. – jdmichal

risposta

13

Quando si utilizza l'operatore == in Java con oggetti, si sta tentando di confrontare i riferimenti agli oggetti. Cioè, questo handle dell'oggetto punta allo stesso oggetto EXACT di questo altro oggetto handle. A meno che le stringhe non siano internate, questo non funzionerà.

Uso String.equals(Object) invece:

Boolean equal = temp.equals(answers[i]); 
+0

Non c'è bisogno di usare 'Booleano' invece di' booleano'. –

+0

Lo stavo solo affermando come trovato nell'OP. Se fosse mio, avrei usato 'finale booleano'. – jdmichal

-5

Fa questo aiuto?

Boolean equal = (temp == answers[i]); 

non sono sicuro che sarebbe un problema, ma ho sempre racchiudono le mie condizioni tra parentesi.

+2

-1 per mancanza del problema completamente –

+0

sì. Ho assolutamente fatto. – Dutchie432

4

Si sta eseguendo il confronto di riferimento, non il confronto di valori. Quando si usa l'operatore == il suo controllo per vedere se i riferimenti sono uguali e non lo sono. Se si desidera verificare se i valori sono uguali, utilizzare il metodo equals.

boolean equal = temp.equals(answers[i]); 
1

== in java per stringhe si sta confrontando per vedere se sono lo stesso oggetto, non lo stesso valore di stringa. Dovresti invece usare .equals che confronterà il valore. == funziona a volte perché le stringhe possono essere internate e fare riferimento allo stesso oggetto tramite riferimento anche se create separatamente attraverso lo stesso valore letterale (quindi stringa b = "Hey" e string c = "Hey" finiscono per essere lo stesso oggetto in background perché "Ehi" è stato internato a un oggetto stringa nascosto).

-1

Come altri hanno dimostrato, è necessario utilizzare equals.

Ma vorrei utilizzare anche lo booleanValue dell'oggetto booleano.

Ecco il tuo codice correttamente fatto

String temp = ""+(num1*num2); 
Boolean equal = temp.equals(answers[i]); 

if(equal.booleanValue()) { 
    correct[i] = true; 
    num_correct ++; 
}else{ 
    correct[i] = false; 
} 
+0

Ehm, perché meno voto? –

+0

Probabilmente perché l'utilizzo di Boolean.booleanValue è molto più complicato di * booleano *. – DJClayworth

+0

e sarebbe unboxed al valore booleano primitivo in ogni caso – David

Problemi correlati