java中 i = i++和 j = i++ 的区别
由于 i++ 和 i-- 的使用会导致值的改变,所以在处理后置的 ++ 和 -- 的时候,java 的编译器会重新为变量分配一块新的内存空间,用来存放原来的值,
而完成赋值运算之后,这块内存会被释放。
(1)对于 j= i++ 的情况
i 的原始值存放在后开辟的内存中,最后将这个值赋给 j,进行 j = i++ 运算之后,j 会得到 i 的值,而 i 又将自加,所以,在释放内存之后,原来存放 j 和 i 的地方将得到的值分别是:j(此时的值等于初始 i 的值)和 i(i 自加后的值)。publicstaticvoidmain(Stringargs[])
{
intj=0;
intk=0;
for(inti=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 下的编译运行结果却不一样,希望能引起读者的注意。
来源: http://www.bubuko.com/infodetail-1971708.html