Java 关于i=i++的探究

问题:

int i = 1;
i = i++;
//问题一:此时i等于多少?
j = i++;
//问题二:此时i,j分别为多少?

分析:

由于i++和i--的使用会导致值的改变,所以在处理后置的++和--运算的时候,java的编译器会重新为变量分配一块新的内存空间,用来存放原来的值,而完成赋值运算之后,这块内存会被释放。
(1) 对于 i = i++

Java 关于i=i++的探究

(2) 对于 j = i++

Java 关于i=i++的探究

解决:

int i = 1;
i = i++;


//上面两句等效于
int i = 1;
int temp = i;
i++;
i = temp;

总结:

Java编译器每次遇到自增(指的是i++)、自减(指的是i–)运算符的时候都会开辟一块新的内存空间来保存赋值之前j的值,即为缓存变量,然后再将这个换成变量的值赋给左边的变量。

扩展:

微软的windows下的visualstudio编译的结果和java不同,但在gcc等其他的c语言编译器下,结果和java是一样的,千万要注意,由于有些人使用的是c语言的编译器但不是windows下的编译器,结果仍然和java的一致,但在windows下的编译运行结果却不一样,希望能引起读者的注意。

参考博客:

https://www.cnblogs.com/Mr24/p/6512137.html