分配布尔值返回布尔值,但分配整数则不会。为什么?

Vis*_*nde 1 java integer boolean

早些时候,我有b=true一个 if 条件,它被视为布尔值。但这同样不适用于整数。因为x=1我收到错误

无法从 int 转换为 boolean。

下面是代码片段。

public class Tester {
    public static void main(String[] args) {
        boolean b = false;
        if (b = true)
            System.out.println("b true");
        else
            System.out.println("b false");

        int x = 0;

        if (x = 1)
            System.out.println("x 1");
        else
            System.out.println("x 0");
    }   
}
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 5

如 Java 语言规范第 15.26 节所述

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

赋值实际上是表达式。他们也评估一个值。什么价值?分配给变量的值。因此,如果我们忽略赋值的副作用,您的 if 语句相当于:

boolean b = false;
if (true)
    System.out.println("b true");
else
    System.out.println("b false");

int x = 0;

if (1)
    System.out.println("x 1");
else
    System.out.println("x 0");
Run Code Online (Sandbox Code Playgroud)

显然,if (1)这是无效的,因为只有boolean值可以进入()if 语句。