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作为输出。
答案 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
返回true
,b = 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并退出,因为它是假的。