关于java中连环赋值的问题

Talk is cheap,show me the code.

上代码:
import java.util.Arrays;
public class Test{
public static void main(String args[]){
int[] arr=new int[5];
int b=2;
arr[b]=b=3;
System.out.println(Arrays.toString(arr));
System.out.println(b);
}
}

这个最后输出结果是:
[0,0,3,0,0]
3

我想要问的是:连续赋值语句的执行的具体过程,为什么b=3 而不是给arr[3]赋值3?
请大神指教!

arr[b]=b=3;
执行过程是 判断 b=3是否成立,此处是不成立,即false,然后 arr[b] = false

java运算符
优先级 运算符 结合性
1 () [] . 从左到右
2 ! +(正) -(负) ~ ++ -- 从右向左
3 * / % 从左向右
4 +(加) -(减) 从左向右
5 << >> >>> 从左向右
6 < <= > >= instanceof 从左向右
7 == != 从左向右
8 &(按位与) 从左向右
9 ^ 从左向右
10 | 从左向右
11 && 从左向右
12 || 从左向右
13 ?: 从右向左

因为[]的优先级高,所以先执行[],这是b是2,再进行=号赋值运算

int b=2;
arr[b]=b=3;
给数组arr下标为2的元素赋值、b=3(数组的下标是从0开始,下标=2的时候即为第三个)。

我觉得可能是jvm把这个式子拆成两条 arr[b]=b; b=3;然后分别执行。建议去看看jvm相关书籍,另外建议不要太纠结这个问题,实际开发也没人会这样写

不好意思啊,是因为中括号优先级高

反编译了下你给的代码,通过操作数栈的变化过程,分析赋值过程attr[2]=3。
图片说明