15

次のように条件を設定してtrueまたはfalseを設定しようとしていますが、常にfalseが返されます。

boolean checked = (categoriesCursor.getString(3) == "1") ? true
                    : false;

Log.i("Nomad",categoriesCursor.getString(3)+ " "+checked);

値を出力しようとすると、次のようになります。

01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 1 false
01-12 00:05:38.072: I/Nomad(23625): 0 false
01-12 00:05:38.072: I/Nomad(23625): 0 false
4

7 に答える 7

41

文字列ではなく参照falseを比較しているため、常に返されます。あなたはおそらく代わりにこれを意味しました:

boolean checked = (categoriesCursor.getString(3).equals("1")) ? true
                : false;

これはたまたまこれと同等です:

boolean checked = categoriesCursor.getString(3).equals("1");

そして、場合categoriesCursor.getString(3)によってはnull、代わりにこれを行う方が安全です。

boolean checked = "1".equals(categoriesCursor.getString(3));
于 2013-01-11T18:39:48.530 に答える
3

equalsの代わりに使用==

boolean checked = (categoriesCursor.getString(3).equals("1"));
于 2013-01-11T18:39:54.227 に答える
3

これを使ってみてください

(categoriesCursor.getString(3).equals("1")) ? true : false;
于 2013-01-11T18:41:50.367 に答える
1

categoriesCursor.getString(3).equals("1")の代わりに使用==

于 2013-01-11T18:40:24.210 に答える
1

まず、文字列を比較するには、次のequals方法を使用する必要があります。

categoriesCursor.getString(3).equals("1")

次に、ここでは三項演算子は必要ありません。equalsすでにブール値になっているので、単純に割り当てます。

boolean checked = categoriesCursor.getString(3).equals("1");
于 2013-01-11T18:40:26.570 に答える
1

これに変更します:

boolean checked = (categoriesCursor.getString(3).equals("1")) ? true : false;

==文字列の内容を比較するために使用しないでください。

==JAVAで演算子をオーバーロードしたり、変更したりすることはできません。を使用している場合object1 == object2、ここでobject1object2は文字列またはその他のオブジェクトであり、参照が同じ基になるオブジェクトを指しているかどうかを確認します。これは内容を比較しません。

于 2013-01-11T18:41:02.113 に答える
1

まず、三項演算子は必要ありません。equals() 次に、の代わりにを使用する必要があります====オペレーターは、オブジェクトへの参照が等しいかどうかをチェックするためです。

于 2013-01-11T18:42:32.830 に答える