为什么布尔值TRUE不为TRUE?

mis*_*sco 2 java boolean

我在debbuging我的Android应用程序时发现了奇怪的行为.

有表达式:

if (r == true)
Run Code Online (Sandbox Code Playgroud)

其中var r具有值true但整个语句为false.我尝试使用对象Boolean和原始类型boolean.

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

这是debbuger的屏幕.

在此输入图像描述

编辑:

我正在使用java.lang.Boolean.

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

if(isSyncRequired(s))
if (r)
if (r == true)
Run Code Online (Sandbox Code Playgroud)

不要工作.

Lou*_*man 11

因为您使用的是大写字母B Boolean,它是一个对象,所以==使用引用相等语义.

你应该做的只是

if (r)
Run Code Online (Sandbox Code Playgroud)

没有必要测试它是否等于真.或者内联它:

if (isSyncRequired(s)) {
Run Code Online (Sandbox Code Playgroud)

  • 您的理由似乎与[布尔相等的JLS部分](http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.21.2)不一致.根据JLS,在比较之前,`r`应该是未装箱的.也许这是特定于Android的东西? (2认同)