1.我们先看一个例子来引出今天的话题:
int i=1,j=1;
i=i++;
j=j+++j;
System.out.println("i="+i+",j="+j);
大家看看结果是什么?答案是:i=1,j=3
下面我们来分析一下到底发生了什么?
这里涉及到一个很重要的概念:java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间!
下面用图来展示内存的变化:
i初始值为1,然后i++语句,编译器遇到i++操作就会分配一个临时内存给变量运算,临时内存中的值为1,这时i执行自增操作i变成2,然后编译器返回到表达式,进行赋值操作将临时内存中的值赋值给i,于是i就从2变成了1,即得到程序那个结果。
同理来分析一下j=j+++j;
首先j初始值为1,然后编译器遇到j++操作符就分配一个临时内存给变量运算,临时内存中的值为1,这时j执行自增操作,j就变成了2,然后编译器返回表达式,执行+j操作,而此时j已经变成了2,于是表达式结果时1+2=3,然后在赋值给j