Java =和==首先计算哪个?

Java =和==首先计算哪个?,java,Java,运行以下代码后,输出将打印:false。所以我假设i1==i2是在b1=i1之前评估的。但顺序不是从左到右吗 public static void main(String[] args) { boolean b1; int i1 = 2; int i2 = 3; if(b1 = i1==i2) { System.out.println("true"); } else { System.out.println("false"

运行以下代码后,输出将打印:
false
。所以我假设
i1==i2
是在
b1=i1
之前评估的。但顺序不是从左到右吗

public static void main(String[] args) {
    boolean b1;
    int i1 = 2;
    int i2 = 3;

    if(b1 = i1==i2) {
        System.out.println("true");
    } else {
        System.out.println("false");
    }
}

签出运算符优先级:


==在之前计算=

您可以在此处查看优先顺序:

最简单的解释是:

在处理赋值时,将计算equals侧的侧,然后将其赋值到


当然,布尔表达式中的赋值通常会限制可读性。更好的做法是将
b1=i1==i2
分配到if之前,并将
if(b1){…}
或在
if(i1==i2){…}
中完全去掉b1。否,根据将
=
放在
=/code>之前进行评估


关于“从左到右”的语句适用于二元运算符的操作数:左操作数在右操作数之前求值。也适用于参数列表。

它首先将一个值放入b1中,然后检查该值是否为真。在这种情况下,2=3所以“b1”值为“false”,看起来它检查i1==i2为false,然后检查b1和(i1==i2),这意味着b1=false,所以如果您不将赋值放在一个函数中,如果您永远不需要记住它的前导,它会打印“false”。如果你记不起一个操作符的优先级,最好把它放在大括号里。不管怎样,如果在预期赋值之前对=求值,那么赋值是什么。这个问题的答案通过简单的逻辑是显而易见的,这似乎是正确的,也可以解释为b1将被分配条件的值(i1等于i2),因此必须在分配之前首先计算==运算符。