Java 中 i=i++; 结果

Java 中运行以下代码 :

int i = 0;
i++;
System.out.println("i的值是 : " + i);

根据我们通常所知道的后自增先使用后增加的道理 , i++ 在使用后i自身会增加一个数值 , 初始值为 0 时 , 自增后就是 1 , 那么输出的结果应该是1 , 但实际上这题的结果却是 0 :

i的值是 : 1

这是因为 JVM 在处理 i = i++; 时 , 会建立一个临时变量来接收 i++ 的值 , 然后返回这个临时变量的值 , 返回的值再被等号左边的变量接收了 , 这样就是说 i 虽然自增了但是又被赋值了0 , 这样输出的结果自然就是 0 了

不妨我们用 temp 临时变量来接收 i++ 的值 , 来看一下结果 :

int i = 0;
int temp = i++;
System.out.println("temp的值是 : " + temp);

temp的值是 : 0

可以看到 temp 的结果就是 0 , 也就是说赋值号右边传递过来的是 i 未自增前的值 , 这符合后自增运算符先使用后增加的原则 , 这时候我们再输出一下 i 的值 :

int i = 0;
int temp = i++;
System.out.println("temp的值是 : " + temp);
System.out.println("i的值是 : " + i);

temp的值是 : 0
i的值是 : 1

i 也的确自增了一个值 , 这样就好理解为什么 i = i++; 中输出第一个 i 为什么是 0 了 , 因为 i 在自增后又被等式右边的值覆盖了 , 也就是说这里的i的值发生了三次变化 , 第一次是我们定义 i = 0; 第二次就是 i 自增后变成了 1 , 第三次就是 i 又被 0 值覆盖了

作者 Github : tojohnonly , 博客 : EnskDeCode

猜你喜欢

转载自blog.csdn.net/tojohnonly/article/details/87877397