首页 > 代码库 > java中 i = i++和 j = i++ 的区别

java中 i = i++和 j = i++ 的区别

技术分享

  由于i++和i--的使用会导致值的改变,所以在处理后置的++和--的时候,java的编译器会重新为变量分配一块新的内存空间,用来存放原来的值,

而完成赋值运算之后,这块内存会被释放。

 

(1)对于j = i++的情况

技术分享

  i的原始值存放在后开辟的内存中,最后将这个值赋给j,进行j = i++运算之后,j会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到的值分别是:j(此时的值等于初始i的值)和i(i自加后的值)。

	public static void main(String args[])
	{
		int j = 0;
		int k = 0;
		for(int i = 0; i < 100; i++)
		{
			j = k++;
		}
		System.out.println(j);
	}

  运行结果是99。接下来对其进行分析:

技术分享

  每一次的循环结束,用来保存i的原始值的内存的数据会被销毁,然后i的新的值又会被放在一段新的内存中,在进行上述的循环,所以最终能够实现j的数据的增加。

 

 (2)对于i = i++的情况

   技术分享

总结:

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

扩展:

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

技术分享

 

java中 i = i++和 j = i++ 的区别