-5

我目前正在阅读 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 现在是否为假,因此不满足显示“FALSE”的 if 含义?

编辑:我知道 = 和 == 之间的区别。我不明白的是它不应该打印“TRUE”吗?

提前致谢。

4

4 回答 4

7

因为在这一行:

if (bValue = false)

您将值分配falsebValue,表达式的结果是false

于 2013-10-23T11:22:45.380 回答
4

赋值bValue = false调用equals的运算符方法。等于运算符返回右手边的值。这样就可以链接等于运算符:

boolean foo;
boolean bar;
foo = bar = false;

bValue = false中,等号运算符的结果是实际被评估的结果,所以它是错误的。

于 2013-10-23T11:31:18.293 回答
2

它的计算结果是false因为使用了 = 运算符,而不是==. 换句话说,第二条if语句将值false赋给变量 bValue。

于 2013-10-23T11:23:42.847 回答
0

您正在分配错误,而不是与错误进行比较

这就是为什么您应该将其编码为:

if (!bValue)

以及为什么您拥有的是反模式。

于 2013-10-23T11:27:11.203 回答