15

我正在尝试设置条件并按如下方式设置真或假,但它始终返回假。

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

尝试使用这个

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

使用equals代替==

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

首先,不需要三元运算符。然后你必须使用equals() 而不是==. 因为==运算符检查对对象的引用是否相等。

于 2013-01-11T18:42:32.830 回答
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, where object1and object2are Strings 或任何其他对象,您将检查引用是否指向同一个底层对象。这不会比较内容。

于 2013-01-11T18:41:02.113 回答