无法理解这背后的逻辑

时间:2013-04-22 09:17:16

标签: java

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作为输出。

7 个答案:

答案 0 :(得分:5)

此类作业的返回值始终是它的右侧。 因此(b = false)的结果是错误的。

它在此处http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.26

的java语言规范中定义
  

在运行时,赋值表达式的结果是赋值发生后变量的值。

答案 1 :(得分:2)

if(b=false)被评估为False。在这里,您将为变量b指定false值。因此它变为if(false),这意味着不会执行if块。

答案 2 :(得分:2)

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

相反,分配会返回已分配的值。

因此b = true返回trueb = false返回false。这就是为什么你的第二个条件不是真的。

答案 3 :(得分:1)

if(b=true)

表示true值设置为b,现在括号b的值将被替换,因此JVM将其视为

if(true) //变量b替换为它的值。

这就是为什么你得到JVM预期的输出。 =是一个赋值运算符。 我们必须使用==运算符来比较布尔值。

答案 4 :(得分:0)

if(b=false)

不同
if(b == false)

如果(b == false)检查b是否为假,则输入if部分,但是 if(b = false)aqssign为ba,然后不输入if部分,因为它是假的。

答案 5 :(得分:0)

if语句的内部部分仅在其true时执行 即if(true)内部语句执行 if(false)内部语句不执行 在第二个if语句中,你将false赋给b,所以它不会执行......

答案 6 :(得分:0)

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