我目前正在阅读OCA Java SE 7程序员I学习指南,我需要帮助理解一个例子。这是代码:
boolean b;
boolean bValue = (b = true);
//Evaluates to 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");
我遇到此代码的问题是第二个输出。为什么这是假的而不是真的? 这是bValue的情况现在是假的,因此不满足if显示“FALSE”的含义吗?
编辑:我知道=和==之间的区别。我不明白的是它不应该打印“TRUE”吗?提前致谢。
答案 0 :(得分:7)
因为在这一行:
if (bValue = false)
您将值false
分配到bValue
,表达式的结果为false
。
答案 1 :(得分:4)
赋值bValue = false
调用equals的运算符方法。 equals运算符返回右侧值。这样就可以将equals运算符链接起来:
boolean foo;
boolean bar;
foo = bar = false;
在bValue = false
中,equals运算符的结果是实际被评估的结果,所以它是错误的。
答案 2 :(得分:2)
它评估为false
,因为使用了=运算符,而不是==
。换句话说,第二个if
语句将值false
赋给变量bValue。
答案 3 :(得分:0)
你分配为假,而不是比较机智。
这就是你应该将其编码为:
的原因if (!bValue)
为什么你有一个反模式。