2013-05-08 12 views
5

C'è mai una situazione in cui l'utilizzo di equals(Boolean) e == restituisce risultati diversi quando si tratta di oggetti Boolean?Boolean.TRUE == myBoolean vs. Boolean.TRUE.equals (myBoolean)

Boolean.TRUE == myBoolean; 

Boolean.TRUE.equals(myBoolean); 

Qui non sto pensando a tipi primitivi, solo oggetti booleani.

+2

hai provato con più istanze di 'Booleano'? –

+0

'myBoolean1 == myBoolean2' dove entrambi sono uguali? – Edd

+0

Ecco perché ho posto la domanda: 'Boolean a1 = true; booleano a2 = true; System.out.println (a1 == a2); '. L'output è "vero" – Edd

risposta

7

ne dite:

System.out.println(new Boolean(true) == new Boolean(true)); 
System.out.println(new Boolean(true) == Boolean.TRUE); 

(entrambi stampa falsa, per the same reason as any other type of objects).

+0

perché stampa falso? Puoi spiegare? – muneebShabbir

+2

'new Boolean (true) == Boolean.TRUE' mostrerebbe il problema ancora meglio. –

+0

è falso perché stiamo confrontando gli oggetti con il segno '=='? – muneebShabbir

2

Sarebbe pericoloso utilizzare == perché myBoolean non possono avere origine da una delle costanti, ma sono stati costruiti come new Boolean(boolValue), nel qual caso sarebbe == sempre come risultato false. È possibile utilizzare solo

myBoolean.booleanValue() 

né con ==equals coinvolti, dando risultati affidabili. Se devi soddisfare anche i valori di null, non c'è niente di meglio del tuo approccio equals.

+0

Anche se questo porterebbe indietro al valore primitivo. – Aquillo

+1

@Aquillo Fai sembrare che sia un problema. Perché dovrebbe essere un problema? Nota che il risultato di entrambe le espressioni di OP è lo stesso primitivo booleano. –

+0

Per me sarebbe una possibile soluzione invece di un problema. Sebbene OP abbia affermato che la sua domanda non è di discutere l'elaborazione dei primitivi. – Aquillo

0

== funziona solo per i tipi primitivi
quando si confrontano gli oggetti è necessario utilizzare sempre o.equls(Object ob)

0
 if(Boolean.TRUE == new Boolean(true)){ 
      System.out.println("=="); 
     } 

     if(Boolean.TRUE.equals(myBoolean)){ 
      System.out.println("equals");; 
     } 

In questo caso prima è falsa. Solo secondo se la condizione è vera. Stampe:

equals