为什么编译器认为表达式 1 + m=6 + 2
计算结果为 boolean 值? 编译器 (Eclipse) 表示该表达式的结果是 boolean 值。为什么? = 的优先级最低,因此第一个 + 完成,1+m
将失败并出现“未初始化的局部变量”编译错误。如果我声明 int m = 1;
那么上面的表达式将失败,因为 (1+1) = (6+2) => 2=8 是不允许的。
class Driver {
static void f(int arg) {
System.out.println(arg);
}
public static void main(String[] args) {
int m;
f( 1 + m=6 + 2); // c.ERR
f( 1 + (m=6) + 2); // prints 9
}
}
最佳答案
特定的错误没有意义,但是如果没有这些括号,您将尝试将右侧分配给 1 + m
的结果,这显然是您无法做到的。括号改变了运算顺序,因此首先发生 m=6
,然后是两个加法。
关于java - 为什么编译器认为表达式 1 + m=6 + 2 的结果是 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48972078/