A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hacket 高级黑马   /  2013-3-12 14:43  /  1167 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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:}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 新人加油

查看全部评分

9 个回复

倒序浏览
i++是执行之后再加一
在i=i++;这一步的时候它的值并没有改变 还是5
本来这之后i的值由于执行了++操作要变成6的
但是在这一步又把此时的值(5)赋回给了i
所以最后i的值就是5了

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
底层原理倒是不懂
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);
         }
}

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
额,之前回答过这样的问题。
楼上正解。
i=i++; 先赋值再 自加
i=++i;就有效果了。。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
当++操作符被置于一个变量值之后时,其作用就是一个后缀增量操作符:表达式 i++ 的值等于i 在执行增量操作之前的初始值,因此,前面提到的赋值语句首先保存 i 的值,然后将i 设置为其值加1,最后将i 复位到它的初始值。
换句话说:这个赋值操作等价于下面的语句:
int  tmp=i;
i = i +1;
i = tmp?;
所以i 还是等于赋值开始之前的值,即为5.

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
如果还有问题,就继续追问,没有了的话,请将帖子分类改成【已解决】~
回复 使用道具 举报
我的理解是:没有用到循环,i++无意义。
回复 使用道具 举报
i++,是先得出i的值再加一,你这个程序运行了一次就还是原来的i的值 i=5啦!

评分

参与人数 1技术分 +1 收起 理由
猫腻 + 1 参与送分

查看全部评分

回复 使用道具 举报
i=i++,运算过程是先将i 的值赋予右边,然后再自增, 用老师的话讲,就比喻为你先出去玩再回家吃饭,而i =++i 则是你先吃饭了,然后再出去玩!
回复 使用道具 举报
在jvm里面有两个存储区,一个是暂存区(堆栈),另一个是变量区。 i = i++;是先将i的值(0)存入堆栈,然后对变量区中的i自加1,这时i的值是1,随后将堆栈的值(0)弹出赋给变量区的i,所以最后i = 0。
通过反汇编能过清晰的看见其底层计算过程。如图:

1.png (2.52 KB, 下载次数: 36)

1.png
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马