Java布尔分配混淆

时间:2013-07-13 06:22:35

标签: java

我对以下java代码感到有点困惑。首先,似乎将赋值语句分配给布尔变量... boolean bvalue = (b = true)而不是true或false。

然后输出为TRUEFALSETRUE。输出的第三个也是最后一个TRUE让我困惑,因为对于第一个if条件,bvalue的计算结果为true。我没有看到任何明确赋予bvalue false的代码。任何有用的评论将不胜感激。

boolean b;
boolean bvalue = (b = true);

if (bvalue)
    System.out.println("TRUE");
else
    System.out.println("FALSE");

if (bvalue = false)
    System.out.println("TRUE");
else
    System.out.println("FALSE");

if (bvalue == false)
    System.out.println("TRUE");
else
    System.out.println("FALSE");

3 个答案:

答案 0 :(得分:4)

=是赋值运算符。它返回指定的值。是代码

if (bvalue = false) 
System.out.println("TRUE");
else System.out.println("FALSE");

相当于

bvalue = false;
if (bvalue) 
System.out.println("TRUE");
else System.out.println("FALSE");

答案 1 :(得分:2)

详细描述: -

    boolean b;
        boolean bvalue = (b = true);    //firstly true assigned to b by (b=true) then b assigned to bvalue (bval=true)
        if (bvalue) // check if  bvalue = true & succeed 
        System.out.println("TRUE");  // printed
        else System.out.println("FALSE");

        if (bvalue = false) // firstly assign false to bvalue then if executes 
        System.out.println("TRUE");
        else System.out.println("FALSE"); // printed as bvalue is false

        if (bvalue == false)  // check if bvalue is false & success
        System.out.println("TRUE"); //printed as bvalue is false
        else System.out.println("FALSE");

输出: - 真正 假 TRUE

答案 2 :(得分:0)

让我为你分解一下:

boolean b;
boolean bvalue = (b = true);    

赋值运算符=,也有一个返回值,它是赋值的值,因此b和bvalue都被赋值为true。

if (bvalue) 
System.out.println("TRUE");
else System.out.println("FALSE");

因为bvalue为true,所以打印“TRUE”。

if (bvalue = false) 
System.out.println("TRUE");
else System.out.println("FALSE");

这里使用赋值运算符而不是比较运算符= = vs ==,因此bvalue被赋值为false,并且也返回到if语句,使得它采用else路径并打印“FALSE”。

if (bvalue == false) 
System.out.println("TRUE");
else System.out.println("FALSE");

这里你比较bvalue,这是假的,与false,这是一个真实的陈述,所以“TRUE”被打印。