2013-05-08 16 views
5

Czy kiedykolwiek zdarzyło się, że używanie equals(Boolean) i == zwróci różne wyniki w przypadku obiektów o numerach Boolean?Boolean.TRUE == myBoolean vs. Boolean.TRUE.equals (myBoolean)

Boolean.TRUE == myBoolean; 

Boolean.TRUE.equals(myBoolean); 

Nie myślę tutaj o typach pierwotnych, tylko o obiektach Boolean.

+2

czy próbowałeś z wieloma wystąpieniami 'Boolean'? –

+0

'myBoolean1 == myBoolean2' gdzie oba są prawdziwe? – Edd

+0

Oto dlaczego zadałem pytanie: 'Boolean a1 = true; Boolean a2 = true; System.out.println (a1 == a2); '. Wynik jest "prawdziwy" – Edd

Odpowiedz

7

Jak o:

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

(zarówno drukować fałszywe, dla the same reason as any other type of objects).

+0

, dlaczego drukowanie fałszywe? możesz wytłumaczyć? – muneebShabbir

+2

'nowy Boolean (true) == Boolean.TRUE' jeszcze lepiej zaprezentuje problem. –

+0

jest fałszywa, ponieważ porównujemy obiekty ze znakiem "=="? – muneebShabbir

2

To byłoby niebezpieczne w użyciu == ponieważ myBoolean nie może pochodzić od jednego ze stałych, ale zostały zbudowane jako new Boolean(boolValue), w którym to przypadku == zawsze będzie skutkować false. Można używać tylko

myBoolean.booleanValue() 

z żadnym == ani equals zaangażowany, daje wiarygodne wyniki. Jeśli musisz podać również wartości - null, to nie ma nic lepszego niż twoje podejście equals.

+0

, chociaż mogłoby to doprowadzić do pierwotnej wartości. – Aquillo

+1

@Aquillo Sprawiasz, że brzmi to jak problem. Dlaczego miałby to być problem? Zauważ, że wynik jednego z wyrażeń OP jest tą samą prymitywną wartością logiczną. –

+0

Dla mnie byłoby to możliwe rozwiązanie zamiast problemu. Choć OP stwierdził, że jego pytanie nie dotyczy tematu przetwarzania prymitywów. – Aquillo

0

== działa tylko dla typów pierwotnych
jeśli porównać obiekty powinny zawsze używać o.equls(Object ob)

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

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

W tym przypadku pierwszy z nich jest fałszywa. Tylko drugi, jeśli warunek jest prawdziwy. drukuje: