2013-05-08 13 views
5

Gibt es jemals eine Situation, in der die Verwendung von equals(Boolean) und == unterschiedliche Ergebnisse zurückgibt, wenn Objekte behandelt werden?Boolean.TRUE == myBoolean vs. Boolean.TRUE.equals (myBoolean)

Boolean.TRUE == myBoolean; 

Boolean.TRUE.equals(myBoolean); 

Ich denke hier nicht über primitive Typen, nur Boolean Objekte.

+2

haben Sie versucht mit mehreren Instanzen von 'Boolean'? –

+0

'myBoolean1 == myBoolean2' wo beide gleich wahr sind? – Edd

+0

Hier ist, warum ich die Frage gestellt habe: 'Boolean a1 = wahr; Boolean a2 = wahr; System.out.println (a1 == a2); '. Die Ausgabe ist "True" – Edd

Antwort

7

Wie wäre:

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

(beide drucken falsch, für the same reason as any other type of objects).

+0

warum es falsch drucken? können Sie erklären? – muneebShabbir

+2

'new Boolean (true) == Boolean.TRUE' würde das Problem noch besser darstellen. –

+0

ist falsch, weil wir Objekte mit '==' zeichen vergleichen? – muneebShabbir

2

Es wäre gefährlich, weil ==myBoolean zu können von einem der Konstanten nicht entstanden sein, sondern als new Boolean(boolValue), wobei in diesem Fall == würde immer ergeben false gebaut. Sie können weder nur

myBoolean.booleanValue() 

mit == verwenden noch equals beteiligt, so dass zuverlässige Ergebnisse. Wenn Sie auch null-Werte berücksichtigen müssen, dann gibt es nichts Besseres als Ihren equals Ansatz.

+0

. Dies würde jedoch zu dem ursprünglichen Wert zurückführen. – Aquillo

+1

@Aquillo Sie lassen es klingen, als wäre das ein Problem. Warum sollte es ein Problem sein? Beachten Sie, dass das Ergebnis eines der Ausdrücke von OP derselbe primitive boolesche Wert ist. –

+0

Für mich wäre es eine mögliche Lösung anstelle eines Problems. Obwohl OP erklärte, seine Frage sei nicht, die Verarbeitung von Primitiven zu diskutieren. – Aquillo

0

== funktioniert nur für primitive Typen
, wenn Sie Objekte vergleichen Sie immer o.equls(Object ob)

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

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

In diesem Fall zunächst ein falsch verwendet werden soll. Nur zweite, wenn die Bedingung wahr ist. Prints:

equals