java - 为什么编译器认为表达式 1 + m=6 + 2 的结果是 boolean 值?

标签 java

为什么编译器认为表达式 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/

相关文章:

java - 绑定(bind)元素的最佳方式是什么? 'all attributes separately' 或 'the entire component'

java - 如何将 xmlrpc lib 添加到 java 库

java - 如何在 Java 中添加 vector 作为值

java - 如何从麦克风捕获音频并将其保存为 Java 中的 FLAC 文件格式类型?

java - 构建如何使用 Maven 自动与 Eclipse 一起工作

java - JSP 使用过滤器写入响应

java - 使用 Java Reflection 从对象列表中查找参数总和

Java字数统计

java - 更改页面时的PdfBox问题

java - Eclipse PDE : Mimicking IResourceChangeEvents for IJavaProject creation between PDE and developer's workspace?