2013-04-22 81 views
1
public class MyClass 
{ 
    public static void main(String args[]) 
    { 
     Boolean b=false; 
     if(b=true) 
     { 
      System.out.println("TRUE"); 
     } 
     if(b=false){ 
      System.out.println("FALSE"); 
     } 
    } 
} 

尽管对于大多数人来说这似乎是一个非常简单的问题,但我无法理解当我运行此代码时输出为TRUE。无法理解此背后的逻辑

由于=是赋值运算符,以便因此这两种情况下它应该是真实的,因为这些值被分配即if(b=true) = true(有效)和if(b=false) = true(有效)。由于这里没有其他条件,所以它应该同时给出TRUE和FALSE作为输出。

+1

'b = false'返回'false'。 – BobTheBuilder 2013-04-22 09:19:24

+3

输出正确。 'if(b = false)'将'false'赋给'b',所以'b'是'false',这就是为什么'if'块没有被输入的原因。 – jlordo 2013-04-22 09:19:43

+0

@Baadshah问题是输出结果只显示“TRUE”,但我认为它应该是“true”和“false” – 2013-04-22 09:20:29

回答

2

你的想法基本正确。然而,如果分配成功,则赋值不会返回true,如果分配不成功,则赋值为false(实际上,赋值不会成功;无效赋值将是语法错误或抛出异常)。

而是,赋值返回已分配的值。

所以b = true返回trueb = false返回false。这就是为什么你的第二个条件不成立。

2

if(b=false)被评估为False。在这里,您将假值赋予变量b。所以它变成if(false)这意味着if块没有被执行。

1
if(b=true) 

意味着true值被设置为b现在在托架b的值将被更换,所以JVM会将其像与它的值替换

if(true) //变量b。

这就是为什么你会从JVM获得这样的输出。 =是一个赋值操作符。 我们必须使用==运算符来比较布尔值。

0
if(b=false) 

if(b == false) 

如果(B == FALSE)不同的检查,如果b为假比进入如果部分,但如果 (B =假)aqssigns假到BA,然后不不要进入if部分,因为它是错误的。

0

if语句仅执行时其真正 即如果(真)内语句执行 如果(假)内声明犯规在第二if语句执行 乌尔分配假到b所以它不执行的内部部分。 ..

0

条件语句必须评估为布尔类型。因此,计算条件语句时,b中包含的值会自动解除装箱,并且与原始类型布尔值工作方式相同。因此,如果(b = true)为真,则返回该值。它的计算结果是,如果(true)将true的值赋给变量b,并且if(b = false),则将false的值赋值给变量b并由于它为假而退出。