zoukankan      html  css  js  c++  java
  • 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下的编译运行结果却不一样,希望能引起读者的注意。

    能让一个男孩子热血的,不仅有梦想,还有姑娘。
  • 相关阅读:
    第二周例行报告
    洛谷 P3384 【模板】轻重链剖分
    洛谷 P3380 【模板】二逼平衡树(树套树)
    洛谷 P4568 [JLOI2011]飞行路线
    2018 ICPC Asia Nanjing Regional Preliminary L. Magical Girl Haze
    牛客 2020 牛客国庆集训派对 day8 G. Shuffle Cards
    洛谷 P3224 [HNOI2012]永无乡
    洛谷 P1486 [NOI2004]郁闷的出纳员
    洛谷 P3391 【模板】文艺平衡树
    洛谷 P3369 【模板】普通平衡树
  • 原文地址:https://www.cnblogs.com/Mr24/p/6512137.html
Copyright © 2011-2022 走看看