2017-02-21 4 views
0

Ich schrieb einen Code:JAVA Boolean Konstruktor gibt unerwartetes Ergebnis

Boolean b1 = new Boolean("programmer"); 
Boolean b2 = new Boolean("tester"); 
System.out.println(b1.equals(b2)); 

Er druckt true als ouput. Warum?

Nach JAVA Dokumentation

new Boolean(String): Ordnet ein Boolean-Objekt den Wert darstellt, true, wenn der String-Argument nicht null ist und ist gleich, Fall zu ignorieren, auf die Zeichenkette "true".

+1

Beide Boolesche Werte sind falsch, daher sind sie gleich und Ihre Gleichheitsüberprüfung wird als wahr ausgegeben. Nichts wirklich Unerwartetes hier. –

+1

Lesen Sie Ihren letzten Satz sehr sorgfältig. Es gibt Ihnen den Grund. – Guy

+1

Weil "einem booleschen Objekt, das den Wert true darstellt, ein Alloc zugeordnet wird, wenn das Zeichenfolgenargument nicht null ist und unter Berücksichtigung der Groß-/Kleinschreibung der Zeichenfolge" true "entspricht." Alles andere ist falsch. –

Antwort

3

Sowohl Ihre b1 und b2 sind Boolean.FALSE, deshalb sind sie gleich.

Nur wenn der String "true" (ignoriert Fall) wird new Boolean(String)TRUE sein.

Hier ist der Konstruktor für Boolean:

public Boolean(String s) { 
     this(parseBoolean(s)); 
    } 

Und die parseBoolean Methode:

public static boolean parseBoolean(String s) { 
    return ((s != null) && s.equalsIgnoreCase("true")); 
} 
1

Standardwert von boolean ist falsch .. und in Ihrem Fall

Boolean b1 = new Boolean("programmer"); // false 
System.out.println(b1); 
Boolean b2 = new Boolean("tester"); // false 
System.out.println(b2); 

So false == false immer true

Zusätzlich zu dem zurückkehren, wenn Sie die Saiten vergleichen möchten, die Sie haben gegeben, dann sollten Sie String Wrapper-Klasse verwenden.