2013-07-13 32 views
-2

我有点在下面的Java代码混淆。首先它似乎分配一个布尔变量的赋值语句... boolean bvalue = (b = true)而不是真或假。的Java布尔分配混乱

然后输出是TRUEFALSE,TRUE。输出结果的第三个也是最后一个真值让我感到困惑,因为第一个if-conditional条件下b值的计算结果为真。我没有看到任何明确赋予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"); 
+1

你确定这编译,因为我认为这将是'bvalue == FALSE',不'bvalue =假' –

+4

仅供参考,使用'if(!bvalue)'而不是'if(bvalue == false)'。 –

回答

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"); 
0

让我打破它给你:

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

赋值运算符,=,也有返回值和它的价值赋值,所以b和bvalue都被赋值为真。

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分配假的,那也返回到if语句,使得它走其他路径,并打印“FALSE ”。

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

这里你比较bvalue,这是假的,有假的,那是一个真正的说法,所以“TRUE”被打印出来。

+0

谢谢大家的澄清。这非常有帮助。 – user2578561

+0

@ user2578561如果您对答案满意,请选择其中一个答案作为接受的答案。 –

1

描述: -

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 FALSE TRUE