黑马程序员技术交流社区
标题:
小小问题的疑惑
[打印本页]
作者:
hacket
时间:
2013-3-12 14:43
标题:
小小问题的疑惑
本帖最后由 hacket 于 2013-3-12 17:52 编辑
一个看似很简单的问题,自己却说不出原理,求高手指点
public class Demo
{
public static void main(String[] args){
int i = 5;
i = i++;
System.out.println("i = "+i);
}
}
运行结果为:i = 5,
求底层的原理{:soso_e183:}
作者:
HM李帅
时间:
2013-3-12 14:49
i++是执行之后再加一
在i=i++;这一步的时候它的值并没有改变 还是5
本来这之后i的值由于执行了++操作要变成6的
但是在这一步又把此时的值(5)赋回给了i
所以最后i的值就是5了
作者:
曹睿翔
时间:
2013-3-12 14:52
底层原理倒是不懂
public class Demo
{
public static void main(String[] args){
int i = 5;
i = i++;//关键这步,++是先赋值后自增1,i++之后你又赋给i,下边那句打印的还是i=5喽,这个时候你要是
//i++;不接收打印的就是6
System.out.println("i = "+i);
}
}
作者:
曾钦
时间:
2013-3-12 14:58
额,之前回答过这样的问题。
楼上正解。
i=i++; 先赋值再 自加
i=++i;就有效果了。。
作者:
高贵杰
时间:
2013-3-12 15:06
当++操作符被置于一个变量值之后时,其作用就是一个后缀增量操作符:表达式 i++ 的值等于i 在执行增量操作之前的初始值,因此,前面提到的赋值语句首先保存 i 的值,然后将i 设置为其值加1,最后将i 复位到它的初始值。
换句话说:这个赋值操作等价于下面的语句:
int tmp=i;
i = i +1;
i = tmp?;
所以i 还是等于赋值开始之前的值,即为5.
作者:
陈丽莉
时间:
2013-3-12 15:07
如果还有问题,就继续追问,没有了的话,请将帖子分类改成【已解决】~
作者:
徐鸿燕
时间:
2013-3-12 15:14
我的理解是:没有用到循环,i++无意义。
作者:
马甲大王
时间:
2013-3-12 15:18
i++,是先得出i的值再加一,你这个程序运行了一次就还是原来的i的值 i=5啦!
作者:
于腾飛
时间:
2013-3-12 15:45
i=i++,运算过程是先将i 的值赋予右边,然后再自增, 用老师的话讲,就比喻为你先出去玩再回家吃饭,而i =++i 则是你先吃饭了,然后再出去玩!
作者:
HM谢文辉
时间:
2013-3-13 09:39
在jvm里面有两个存储区,一个是暂存区(堆栈),另一个是变量区。 i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值是1,随后将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。
通过反汇编能过清晰的看见其底层计算过程。如图:
1.png
(2.52 KB, 下载次数: 58)
下载附件
2013-3-13 09:38 上传
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2