Java中的布尔表达式

use*_*155 3 java boolean return

我对Java中的return语句中布尔变量的含义(评估)有疑问.

我知道:

if (var) { ... }
Run Code Online (Sandbox Code Playgroud)

是相同的:

if (var==true) { ... }
Run Code Online (Sandbox Code Playgroud)

在第二种情况下,我们明确地说var == true,但我们不需要这样做,因为无论如何Java都将var计算为true.我希望我理解这一点.

我的问题是:返回布尔变量时是否相同?当我们有退货声明?

例如,任务指定:方法LooksBetter()仅在b <a时才返回true.我的解决方案是:

public boolean looksBetter() {
     if (b < a) {
         return true;
     } else {
         return false;
     }
}
Run Code Online (Sandbox Code Playgroud)

简单的答案是:

public boolean lookBetter() {
      return b < a;
}
Run Code Online (Sandbox Code Playgroud)

因此,似乎在这里我们再次有这个隐含的假设,即在b <a == true的情况下,方法的返回为真.对不起......这看起来很微不足道,但我对此感到不舒服,我不知道为什么.谢谢.

Rob*_*ska 14

这不是一个"隐含的假设",而是编译器正在做的事情.的b < a,如果它被用于的只是一个表情,同样的if声明.表达式求值为a boolean,然后返回.

另外值得注意的是,你似乎互相交换boolean,Boolean好像它们是一样的,但它们实际上并非如此.boolean原始形式,Boolean而是一个包装的对象boolean.

  • 使用"基本相同的"方法的唯一问题是使用null.对象可以为null,原语不能.尝试自动取消装箱空.不完全明白异常意味着什么. (3认同)

Bil*_*ler 11

是的,所有布尔都是如此.您可以考虑if(表达式)评估'表达式'以查看它是'true'还是'false'.当你这样做

if(b < a == true)
Run Code Online (Sandbox Code Playgroud)

它首先测试是否b <a,如果是,它现在测试:

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

它现在测试true == true(显然它确实如此).当你省去额外的'== true'时,Java没有做任何棘手的事情,它只需要少执行一次测试.没有理由你不能说:

if(((b < a == true) == true) == true)
Run Code Online (Sandbox Code Playgroud)

但是每次看到等号时,它都会导致Java执行额外的测试.


Pau*_*lin 5

不要让代码复杂化.如果您觉得需要说"a <b == true",那么您可以遵循它的逻辑错误(结论+混淆)并说" ((((((((...(a<b) == true) == true).... == true)"

"a <b"是一个布尔表达式.如果你已经有一个布尔值,为什么要将它与另一个布尔值进行比较?你不是使它布尔值的方式.