public class TestDemo{
public static void main(String args[]){
int i=0;
i=i++;//这里前面的i被赋予0的值我可以理解,但是这条语句执行之后右边的i++为什么没有继而改变i的值呢?我不能理解
System.out.print(i);
//输出为0;
}
}
//希望给我一个具体的解释,万分感谢!
public static void main(String args[]){
int i=0;
i=i++;//这里前面的i被赋予0的值我可以理解,但是这条语句执行之后右边的i++为什么没有继而改变i的值呢?我不能理解
System.out.print(i);
//输出为0;
}
}
//希望给我一个具体的解释,万分感谢!
等同于
i=i
i++如果你想i增加1,使用
i += 1;
或者
i = ++i;
在这里jvm里面有两个存储区,一个是暂存区(是一个堆栈,以下称为堆栈),另一个是变量区。
因为i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值的确是1,但是随后的i=i++,又将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。
又因为i = ++i;是先对变量区中的i自加1,然后再将变量区中i的值(1)存入堆栈,虽然最后执行了i = ++i,但也只是将堆栈中的值(1)弹出赋给变量区的i,所以i = ++i;的结果是i = 1。
i++ 是先赋值,后增加 i = i++
等同于
i=i
i++
这样打印会打印出是1而不会是0?
i=i++;//这里先执行i++,表达式(i++)返回0,然后i自加为1,接着再把表达式(i++)的值赋给i,这时i又变为0了。
这个问题以前在一个java群里有人讨论过,我只是把大家最后讨论的结果拿出来了,呵呵。
这个问题CSDN以前也有人提过,刚去查了,没找着,楼主可以去找找。