私はこの振る舞いを持っている私は本当に比較文字列やブール
${someVar}
${someVar.class.name}
${someVar == 'error'}
出力それはexlpainedすることができますどのように
false
java.lang.Boolean
true
- を理解していませんか?
- 2つの「もの」が同じタイプで、その値が同じであるかどうかを最初にテストするために、テストを書き込む正しい方法は何ですか?
私はこの振る舞いを持っている私は本当に比較文字列やブール
${someVar}
${someVar.class.name}
${someVar == 'error'}
出力それはexlpainedすることができますどのように
false
java.lang.Boolean
true
EL specificationで定義されたように、これは、言語の挙動である:
A {==、=、EQ、NE!} B
- 他のルールが
- が省略さAまたはBがAおよびBの両方をブール値に強制する場合、演算子を適用する
強制Aをブール
- Aがnullまたは "" である場合、Aは文字列で、Boolean.valueOf(A)がない場合、Aがブールであれば、そうでない場合
- を返し、そうでない場合はfalse
- を返します例外をスローしない、それを
ので、文字列リテラルはBoolean.valueOf("error")
経由ブールに強制変換されそうでなければ
<c:set var="errorString" value="${'error'}" />
${someVar.class == errorString.class}
については
EL両側の一方がBoolean
(又はboolean
)であり、他方側がString
ある場合、String
は、そのjavadoc以下を言うBoolean#valueOf()
によってBoolean
に解析される。
Boolean
を、指定された文字列で表される値で返します。Boolean
は、文字列引数がnull
でない場合にはtrue
の値を表し、文字列 "true"と大文字と小文字を区別しません。
したがって、false
を返します。これは実際にfalse
に相当します。
EL式は、型がブール値と文字列の両方になることを考慮して書き直す必要があります。単一の型に固執し、単一の型で型を混同しないようにする必要があります。
は、2つの「もの」は、同じクラスのインスタンスであることを確認します。
someVar
をstringに変換してから2つの文字列を比較する方が良いかもしれません。少なくとも私の場合はsomeVarがStringまたはBooleanであることが保証されていないので、 Stringに変換できます。古いテストケースと交換しwithaよりコンパクトで簡単なものを削除し
//false
//class java.lang.String
//false
を出力
。 – Paolo
もっと良い ':)' –