Vergleich von string-und boolean-Ausdruck in Sprache
Ich habe dieses Verhalten kann ich nicht wirklich verstehen
${someVar}
${someVar.class.name}
${someVar == 'error'}
Ausgänge
false
java.lang.Boolean
true
- Wie kann es sein, exlpained?
- Was es den richtigen Weg zu schreiben, der test, um zuerst zu testen, ob die beiden 'Dinge' haben den gleichen Typ und dann, wenn Ihr Wert ist der gleiche?
- Entfernt die alte test-Fall und ersetzt mit einem mehr kompakt und unkompliziert ein.
- Viel besser
:)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist das Verhalten der Sprache definiert, in der EL-Spezifikation:
So, das string-literal ist gezwungen, einen booleschen über
Boolean.valueOf("error")
die gibt false zurück.Wenn eine der beiden Seiten in der EL ist ein
Boolean
(oderboolean
) und die andere Seite ist einString
, dann dieString
werden analysiert, umBoolean
durchBoolean#valueOf()
deren javadoc sagt der folgende:So, es gibt
false
- und das ist in der Tat gleichfalse
.Müssen Sie umschreiben Ihre EL-Ausdrucks zu berücksichtigen, dass die Art kann sowohl ein boolean und ein string, oder einfach nur zu halten, um eine einzige Art und nicht zu mischen-Typen in einem einzigen Attribut.
Wie bei Punkt 2.
überprüfen, dass die beiden 'Dinge' sind Instanzen der gleichen Klasse.
Aber es könnte besser sein, zu konvertieren
someVar
string und vergleichen Sie zwei strings, da (zumindest in meinem Fall) someVar ist nicht garantiert, dass eine Zeichenkette oder einen booleschen Wert, so könnte es nichts anderes sein kann, in eine Zeichenfolge konvertiert werden.Welche Ausgänge