关于Java中的a=a++
笔记,仅作参考
关于java中的++,先举几个例子
1、 ++在后
int a=1;
int b=a++;
System.out.println(b);//b==1
System.out.println(a);//a==2
++在后,先计算,再自增
int i=0;
i=++i+i;
System.out.println(i); //2
2、++在前,应该先自加,此时++i是1,那后面的+i,就应该是1,所以1+1赋值给i,所以最后i=2
int i=0;
i=i+++i;
System.out.println(i); //1
3、++在后,应该先参与运算,它的首先运算是+i,所以0+0,然后i再自增操作,变成了1,再赋值给它本身,所以这个i是1
最后给出特殊的一个也就是标题中的a=a++;
public static void main(String[] args) {
int a=1;
for(int i=0;i<100;i++) {
a=a++;
}
System.out.println(a); //运行结果是1,如果换成a=a--,结果也是一样,如果是a+=1或a=a+1,那结果就是101
}
这个点很特殊,它不是我们想象中的a赋值给它自身然后再自加1,具体原理以后再说,现在只需要记住就行,百度了一下,得出这个答案:
a = a++与a = ++a均为先计算后赋值,不同的是:
a = a++中变量先压栈,后计算,最后栈顶元素弹出赋值于a;
a = ++a中变量先计算,后压栈,最后栈顶元素弹出赋值于a。
具体原理和JVM机制有关,有兴趣的朋友可以去看看下面两篇博客
https://blog.youkuaiyun.com/hudashi/article/details/7062675
https://blog.youkuaiyun.com/hudashi/article/details/7062781