2

Android アプリのデバッグ中に奇妙な動作を発見しました。

表現があります:

if (r == true)

varrには値trueがありますが、ステートメント全体が false です。オブジェクトBooleanとプリミティブ型を使用しようとしていますboolean

私はいくつかの基本的な間違いを犯していると確信しています。

これがデバッガーの画面です。

ここに画像の説明を入力

編集:

を使用してjava.lang.Booleanいます。

メソッドisSyncRequiredが戻りBoolean.TRUE、if-else ブロックで比較されます。

if(isSyncRequired(s))
if (r)
if (r == true)

動作しません。

4

3 に答える 3

11

Booleanオブジェクトである大文字 B を使用しているため==、参照等価セマンティクスを使用します。

あなたがすべきことはただ

if (r)

true に等しいかどうかをテストする必要はありません。またはインライン化します:

if (isSyncRequired(s)) {
于 2013-02-19T22:02:03.287 に答える
1

==参照により比較します。Booleanオブジェクトを値と比較していbooleanます。

if (r)代わりに使用してください。

于 2013-02-19T22:03:02.477 に答える
1

値をアンボックスする必要がありBooleanます。試す

if (r.booleanValue())

また

if (r.booleanValue() == true)
于 2013-02-19T23:13:15.203 に答える