在java中我们知道的是i++先赋值再运算,而++i是先运算再赋值。先看下面代码输出结果是什么:
package com.wzq;
public class Main {
public static void main(String[] arg){
int x = 0;
int y = 0;
x = x++;
x = x++;
x = x++;
x = x++;
x = x++;
System.out.println("now: x = " + x);
y = ++y;
y = ++y;
y = ++y;
y = ++y;
y = ++y;
System.out.println("now: y = " + y);
}
}
编译器中输出结果是x = 0;y = 5;
解释:
在代码中5个x++。由于i++是先赋值后计算,所以x++的执行顺序是x = 0写入寄存器,x在内存中做自加一处理这时候x = 1;此时“=”符号右边的值是1,但是在赋值时候是把在寄存器中的0写入到“=”左边,所以x = 0;把x = 1的值覆盖掉啦,最终结果就是0;
在代码中5个y++。由于++i是先计算后赋值,所以++y的执行顺序是在内存中y进行自加一,y = 1,然后把y = 1写入寄存器。最后在给“=”左边的y赋值时候把寄存器中的1赋值给y此时y = 1;一次类推最后输出的结果就是5。