如果你不理解,你不会看编译后的代码吗?
ILOAD 1
IINC 1 1
ISTORE 1
上面是j=j++;这一句的编译后代码,很明显,首先ILOAD 1载入局部变量j到栈顶,IINC 1 1给局部变量j加上1,ISTORE 1将栈顶存入j,注意这个时候栈顶的值是j最开始的值,也就是没有加1之前的值,所以你这个和j=j等效,或者说是没有实际作用的
ILOAD 1
IINC 1 1
ISTORE 1
上面是j=j++;这一句的编译后代码,很明显,首先ILOAD 1载入局部变量j到栈顶,IINC 1 1给局部变量j加上1,ISTORE 1将栈顶存入j,注意这个时候栈顶的值是j最开始的值,也就是没有加1之前的值,所以你这个和j=j等效,或者说是没有实际作用的
先赋值再自加1,自加1的值没有赋值给j,所以永远是0.
你可以换成j=++j,这样应该是你想要的效果,先自加1,再将自加后的结果赋值给j。