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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Deleba 中级黑马   /  2016-5-17 23:19  /  884 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int i=0;
i=i++;
System.out.println(i);
以上代码i的结果是:0.
但C++中确实1,为什么?

4 个回复

倒序浏览
1.0  iconst_0 //将int型0推送至栈顶
1  istore_1 //将栈顶int型数值存入第二个本地变量 i=0   (int i=0)
2  iload_1 //将第二个int型本地变量推送至栈顶           然后将i推送至栈顶   0
3  iinc 1 1 //将指定int型变量增加指定值                       完成i++
4  istore_1 //将栈顶int型数值存入第二个本地变量        将栈元素赋值给了i    i=0
5  getstatic java/lang/System/out Ljava/io/PrintStream;
6  iload_1
回复 使用道具 举报
可以参考这个链接http://bbs.itheima.com/forum.php?mod=viewthread&tid=301681
其中c语言 java对i++的处理不一样.

i++是一个表达式,是有返回值的,它的返回值就是i自加前的值
Java对自加是这样处理的:
首先把i的值(注意是值,不是引用)拷贝到一个临时变量区temp,然后对i变量加1,最后返回临时变量区temp的值。
程序第一次循环时的详细处理步骤如下:
步骤1 JVM把i值(其值是0)拷贝到临时变量区temp
步骤2 i值加1,这时候i的值是1
步骤3 返回临时变量区temp的值,注意这个值是0,没修改过。
步骤4 返回值赋值给i,此时i值被重置成0。

注意:        i=i++;在(java语言)运行过程中如下:
        int temp=i;
        i=i+1;
        i=temp;



而C语言不是这样处理的
回复 使用道具 举报
i自增后赋值给i
回复 使用道具 举报
如果是int j = i++;
输出的就是1;
如果是i,就是0 ;
运算方式是先赋值 后运算,打印i,采用就近原则。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马