黑马程序员技术交流社区

标题: JAVA中i++问题? [打印本页]

作者: Deleba    时间: 2016-5-17 23:19
标题: JAVA中i++问题?
int i=0;
i=i++;
System.out.println(i);
以上代码i的结果是:0.
但C++中确实1,为什么?
作者: J_P    时间: 2016-5-17 23:39
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
作者: 骄阳登峰    时间: 2016-5-18 07:42
可以参考这个链接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语言不是这样处理的

作者: 56368009    时间: 2016-5-18 22:05
i自增后赋值给i
作者: hjbing456    时间: 2016-5-18 22:11
如果是int j = i++;
输出的就是1;
如果是i,就是0 ;
运算方式是先赋值 后运算,打印i,采用就近原则。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2