代码之家  ›  专栏  ›  技术社区  ›  GuruKulki

在“if”语句中与==和=混淆

  •  12
  • GuruKulki  · 技术社区  · 15 年前

    我知道在java的if语句中不能像在其他几种语言中那样使用赋值运算符。

                int a;
    
                if(a = 1) {  } 
    

    将产生编译错误。

    但是下面的代码工作得很好,如何?

               boolean b;
    
               if(b = true) {   }
    

    5 回复  |  直到 13 年前
        1
  •  39
  •   Jon Skeet    15 年前

    boolean 第二种情况下的表达。 if 表达式要求条件为

    int a;
    
    a = 1;
    if (a) { }
    

    boolean b;
    
    b = true;
    if (b) { }
    

    这是一个不直接比较真假的原因。所以我总是写 if (b) 而不是 if (b == true) if (!b) 而不是 if (b == false) . 你还是会遇到麻烦 if (b == c b c 不可否认的是,一个输入错误就可能引起问题。但我不能说这件事曾经发生在我身上。

    编辑:响应您的编辑-各种类型的分配可用于 如果 声明-和 while 循环等,只要整体条件表达式 . 例如,您可能有:

    String line;
    while ((line = reader.readLine()) != null)
    {
        // Do something with a line
    }
    

    当我 通常 避免副作用的条件下,这个特定的成语往往是有用的例子,上面显示的,或使用 InputStream.read . 基本上是“虽然我读到的值是有用的,但使用它。”

        2
  •  10
  •   Gumbo    15 年前

    对于 if 您需要一个计算结果为 布尔值 b = true 评估到 布尔值 但是 a = 1 内景 因为赋值总是按赋值计算。

        3
  •  1
  •   JasCav    15 年前

        4
  •  1
  •   Ikke    15 年前

    在java中,没有隐式转换。所以非布尔值或非布尔值不会自动转换为布尔值。

    在第一种情况下,语句的结果是一个int,它是非布尔的,不起作用。最后一种情况,结果是布尔值,可以在if语句中进行计算。

        5
  •  1
  •   Greg Hewgill    15 年前

    if 声明”,但“在 如果 boolean ". 赋值表达式生成被赋值类型的值,因此Java只允许在 如果要分配 布尔值 价值

    这就是为什么 if (foo == true) if (foo)