【问题标题】:False boolean = True?假布尔=真?
【发布时间】:2011-10-25 00:41:55
【问题描述】:

我在一本书中找到了这段代码,并在 Netbeans 中执行了它:

boolean b = false;
if(b = true) {
    System.out.println("true");
} else {
    System.out.println("false");
}

我只是不明白为什么这段代码的输出是真的, 有谁能给我解惑, 谢谢。

【问题讨论】:

  • 这段代码还演示了为什么用truefalse 测试布尔值的相等性不仅没有意义而且很危险。

标签: java boolean


【解决方案1】:

它缺少双等号。所以它是在做赋值而不是相等比较(记住,赋值的返回值是新值)。在大多数情况下,大多数类型不是布尔值这一事实意味着结果不是布尔值,因此对于 if 语句来说它是非法的,从而导致编译器错误。但是,由于此处的类型已经是布尔值,因此分配结果为布尔值,因此安全检查失败。因此,b = true 意味着b 被分配了值true,这是if 语句返回和检查的值。

【讨论】:

    【解决方案2】:

    这是因为 if 语句条件不是比较。这是一个任务:

    if(b = true)
    

    这将始终返回 true。所以它会一直打印true

    如果你想做一个比较,你需要使用==

    【讨论】:

    • 如果您没有收到关于此的警告,您的编译器/IDE 警告设置需要提高。
    • 这个答案错了​​吗?如果(b = false)(如在有目的的分配中)我得到错误,比如逻辑切换 b = true;return b = false
    • @Nik 一般而言,您不应该尝试编写那样神秘的代码。虽然它可能对您很方便,但很容易让下一个尝试阅读您的代码的人感到困惑。
    • 如果它被评论并符合风格,我看不出有问题。冗长的代码并不总是好的.....想想如果你有很多专门的计算需要非常快的东西。我只是惊讶地看到一个测试用例失败了
    • @Nik 请理解更短的!= 更快。我们也在这里跑题了。这和我的回答有什么关系?
    【解决方案3】:

    在您的“if”语句中,您将值“true”分配给 b。您应该使用比较运算符“==”来检查该值。

    boolean b = false;
    
    if(b == true)
    {
       System.out.println("true");
    }
    else
    {
       System.out.println("false");
    }
    

    【讨论】:

      【解决方案4】:
       if(b = true)
      

      这是真的,因为 = 是赋值运算符而不是相等运算符 ==

      【讨论】:

        【解决方案5】:

        if (b = true) 将值true 分配给b,然后作用于该真实值。这就是类 C 语言的危险,如果你在比较时忽略了第二个 =,你会得到一个赋值,并得到一个意想不到的结果。

        【讨论】:

          【解决方案6】:

          这是因为它是一项任务。您不对 b 进行检查,只需将 true 赋值给它。

          【讨论】:

            【解决方案7】:

            认为 int x 有 2 个可能的值,1 或 0。如果 x = 1,则执行此操作。否则,(x = 0)然后做其他事情。布尔值只是说它要么是一个条件,要么不是那个条件。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-01-05
              • 2013-12-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2020-01-21
              • 2011-01-23
              相关资源
              最近更新 更多