Ok, das ist dumm, aber wtf geht weiter?
Ich habe eine String-Variable in einem Servlet, die den Wert eines Parameters annimmt und basierend auf diesem Wert mache ich einen Test, aber der if
funktioniert nicht. Was ist das Problem?
In der Konsole zeigt mir System.out.println, dass der Wert der Aktion "etwas" ist
%Vor% Ihr zweiter Vergleich ist falsch. Sie sollten auch equals
anstelle von ==
verwenden, wie folgt:
Der ==
-Operator vergleicht Referenzen von (String) -Objekten und unter normalen Umständen haben gleiche -Strings nicht automatisch die gleiche Referenz, d. h. sie sind unterschiedliche Objekte. (Es sei denn, beide sind internalisiert , aber normalerweise du solltest es nicht berücksichtigen)
Ansonsten funktioniert Ihr Beispiel gut und der erste Vergleich ist gültig. Versuchen Sie, den zweiten Vergleich zu korrigieren. Wenn es funktioniert, hast du dein Problem gefunden. Wenn nicht, versuchen Sie es mit einem Debugger und überprüfen Sie alles.
PS: Beim Vergleich von literalen Strings mit dynamischen String-Objekten ist es ratsam, die Methode equals
für die literale Zeichenfolge aufzurufen:
Auf diese Weise können Sie NullPointerExceptions vermeiden, wenn das Zeichenfolgenobjekt null ist.
Ihre zweite Bedingung ist wahrscheinlich nie wahr - Sie testen, ob das String-Objekt, das durch das Beschneiden von action
erstellt wurde, dasselbe Objekt wie das String-Literal "something"
ist. Dies ist nur dann der Fall, wenn action
auf denselben literalen Wert an anderer Stelle gesetzt ist. Verwenden Sie stattdessen "something".equals( action.trim() )
.
Ihre erste Bedingung wäre wahr, die Zeichen in der Zeichenfolge action
sind die Zeichen "something"
. Wenn es nicht wahr ist, dann nicht. Setze es in einem Test durch, logge es ein, drucke es aus oder schaue es in einem Debugger an.
Wenn Sie eine Zeichenkette zum Debuggen ausgeben, verwenden Sie etwas wie System.out.println ( "String = >" + string + "<" );
, so dass es offensichtlich ist, wenn es Leerzeichen gibt.
Meine Vermutung ist, dass Sie nachlaufende oder führende Leerzeichen haben, die nicht im println angezeigt werden.
Kombinieren Sie dies mit der Tatsache, dass Sie action.trim() == 'something'
verwenden, bedeutet dies, dass dieser Test auch nicht funktioniert.
Schalten Sie diese auf .equals("something")
um, wie von anderen vorgeschlagen, und es könnte funktionieren.
Sie können besser vor Nullen schützen, indem Sie die if-Klauseln umschalten, damit das String-Literal zuerst angezeigt wird.
Da Sie aber anscheinend auch vor dem Leerzeichen auf dem Parameterwert schützen möchten, können Sie auch eine Nullabgleichfunktion des Parameterwerts verwenden, indem Sie StringUtils.trimToEmpty von Apache Commons Lang :
%Vor%Tags und Links java