【问题标题】:How is a boolean evaluated in a java if else statement? [closed]java if else 语句中如何评估布尔值? [关闭]
【发布时间】:2018-01-13 08:46:37
【问题描述】:

为什么在类 Test01 中的 if 语句之后 b 为真 - 而在类 Test02 中的 else if 语句之后 b 似乎不是是真的吗?

/* Evaluate the two classes below independently of one another*/    

class Test01 {
  public static void main(String[] args){   
    boolean b = true; 
    if (b) 
      System.out.println("B");
  }
}


class Test02 {
  public static void main(String[] args){   
    boolean b = true; 
    if (b = false) 
      System.out.println("A");
    else if (b) 
      System.out.println("B");
  }
}

【问题讨论】:

  • 打开你的编译器警告,你会得到答案。
  • 你正在评估价值而不是评估

标签: java types boolean


【解决方案1】:

你混合运营商。

if (b = false) 是一个赋值运算符。

if (b == false) 是一个相等比较器。

你也可以写:if (!b)

您可以参考operators

当你写的时候:

boolean b = true;
if (b = false)
    System.out.println("A");
else if (b)
    System.out.println("B");

JVM 按此顺序执行条件语句:

  • b = false 已评估,因此 b 变量现在引用 false
  • if (b) 被评估为false,因此条件语句为false
  • else if (b) 也被评估为 false,因此条件语句为 false

所以什么都没有显示。

【讨论】:

  • 不。是你的。我的错。你说清楚了......我的理解是, b 是一个局部变量。它只有一个副本,因此语句会在其方法块中按时间顺序影响它。
  • @vee 你明白了。 b 一次发生变化,因此它的值会反映在下一个使用它的语句中。
【解决方案2】:

因为你在做if (b = false)。如果(b == false),你必须在哪里做。当您执行= 时,它只是将false 分配给b,并且在下一个条件下无法进入if。

【讨论】:

  • 可能告诉他他必须做if (!b)会更好。
  • @Oleg 因为 OP 已经与 = vs == 混淆了。暂时清除它不想增加更多混乱:)。
  • @GhostCat 你怎么知道这是一个错字,而 OP 已经知道了? OP告诉你了吗?
  • 给出OP的标题,我跳起来回答以消除混乱。如果你有,请随意将其标记为骗子。我也会投票。
  • @GhostCat 我也像你一样为拼写错误投票。所以到目前为止你有 3 个支持者,需要另外 1 票才能结束。好好休息一天。
【解决方案3】:

因为赋值的“结果”是赋值的值。所以在第二种情况下它仍然是一个布尔表达式,现在在这种情况下bfalse

if (b = false)

将被评估为

if(false) //you are assigning false to the b so the control will go to the else block   

【讨论】:

    【解决方案4】:

    你不能在 if 语句中应用 =,你必须像这样使用 == if(b==false)

    【讨论】:

    • 确实可以做到。是的,这样做是错误的——但很明显,他“可以”做到这一点。这是可能的 - 但只会导致意想不到的结果。
    • 宾果游戏。出乎意料的结果让我很困惑……
    • 为什么在 if 条件下不允许赋值给布尔值
    猜你喜欢
    • 2017-08-02
    • 1970-01-01
    • 1970-01-01
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-04
    • 1970-01-01
    相关资源
    最近更新 更多