||之间的优先顺序 和&& - java

ana*_*ema 0 java

由于我的原因,&&其优先级高于||以下代码

    static boolean a;
    static boolean b;
    static boolean c;
    public static void main(String[] args) {
        boolean d = (a = true) || (b = true) && (c = true);
        System.out.println(a + " " + b + " " + c + " ");

    }
Run Code Online (Sandbox Code Playgroud)

这个代码的输出是true false false,因为有括号我假设true变量a,b和c 的赋值将在执行表达式之前首先执行,&&并且||我的理解就像(a = true)|| ((b = true)&&(c = true))但是根据输出,似乎在分配true给变量a后,左侧||已经执行,因此不执行其余的代码.这是否意味着||已经覆盖了&&自左侧执行以来?

Sot*_*lis 9

是的,&&优先级高于||.这意味着你的陈述

boolean d = (a = true) || (b = true) && (c = true);
Run Code Online (Sandbox Code Playgroud)

相当于

boolean d = (a = true) || ((b = true) && (c = true));
Run Code Online (Sandbox Code Playgroud)

这并不意味着||将首先评估右侧.事情从左到右评估.由于||短路和a = true评估true,它不需要评估右侧||.

其余的类变量初始化为默认值false(对于boolean值).