为什么布尔TRUE不是TRUE?

问题描述:

我在debbuging我的android应用程序中发现了奇怪的行为。为什么布尔TRUE不是TRUE?

有表达:

if (r == true) 

其中var r的值为true但整个陈述是错误的。我尝试使用对象Boolean以及原始类型boolean

我确信我犯了一些基本错误。

这是来自debbuger的屏幕。

enter image description here

编辑:

我使用java.lang.Boolean

方法isSyncRequired返回Boolean.TRUE并且它在if-else块中进行比较。

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

不工作。

+0

我忘了...我也尝试声明'如果(R)'。 – misco 2013-02-19 22:02:51

+0

出于好奇,为什么你只是在做:'if(isSyncRequired(s))'或者甚至'if(r)'你现在比较一个布尔值来查看它是否为真,而你可以直接使用这个值。而当使用布尔使用等于不== == – 2013-02-19 22:03:00

+0

我首先使用'if(isSyncRequired(s))',但应用程序已经有了奇怪的行为。然后我开始发现错误。我在if(r == true)后面的if(r)'后改变它。 – misco 2013-02-19 22:08:05

因为您使用的是大写字母B Boolean,因此==使用引用相等语义。

,你应该做的事情仅仅是

if (r) 

有没有必要,以测试它是否等于true。或内联:

if (isSyncRequired(s)) { 
+2

您的理由似乎不符合[关于布尔相等的JLS部分](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21.2) 。根据JLS的规定,在比较之前应将“r”拆箱。也许这是Android特定的东西? – thkala 2013-02-19 22:10:00

+0

我区分对象和原始的区别。但你的建议不工作。 – misco 2013-02-19 22:11:04

+0

我同意,但OP的问题似乎明确指出,他们的情况没有解决。 – 2013-02-19 22:11:13

==通过参考进行比较。您正在比较Boolean对象与boolean值。

改为使用if (r)

您应该清除Boolean值。尝试

if (r.booleanValue()) 

if (r.booleanValue() == true)