public class Test {
public static void main(String[] args) {
int i = 10;
int j = 20;
i = i++;
System.out.println(i);
}
}
原本在第5行,我是想写j = i++;来着,但是错写成i=i++;也正是由于这个语句,得出了令人意想不到的结果。因为如果写成 j=i++;
那么会输出j=11;
而写成i = i++;则输出得到i=10;
而如果同样的代码换成C/C++执行,则无论是i=i++还是j = i++;
得到的结果是相同的,都是11,这是为什么呢?作者: 王雷 时间: 2012-9-20 23:08
第一步 内存中有一个i = 10,然后用一个开辟一块临时空间将10存起来, 第二步 i++,i变成11,第三步,再将临时存的10赋值给i。所以i还是10作者: 皮卫凯 时间: 2012-9-20 23:18
int i = 10;
int j = 20;
i = i++;
System.out.println(i);
i = i++;
i++意思是先赋值在自增。i=i++的话 i 先把值赋给等号左边的 i,再自增。你打印 i ,虽然 i 自增了,但是自增的值没有赋值,所以i 的值还是为 10.
j=i++;
i 把值赋给 j,然后再自增。但打印的是i 。这是的 i 已经自增了。所以打印的值是11
C或者C++的话,也是一样的。不可能不一样的。作者: 李健_8 时间: 2012-9-20 23:26
只要理解一个道理就好了 先赋值 后运算 作者: 黄基焜 时间: 2012-9-20 23:43
j=i++和i=i++是的赋值流程是一样的。所以后面跟的打印出来都是10,不信可以自己试下,绝对不是11.
class demo9
{
public static void main(String[] args)
{
int i = 10;
int j = 20;
i = i++;//这里可以这样想i++就是i=i+1的过程,但是i=i++是先赋值再自增所以就相当于i=i再i+1的过程因为自己赋值了给自己,所以不会重复赋值的操作
System.out.println("i=="+i);//这里的i是10
j = i++;
System.out.println("j=="+j);//这里的j也是10
System.out.println("i=="+i);//这里的i才就是11