免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
论坛 程序设计 Java i = i++;
1234下一页
最近访问板块 发新帖
查看: 11638 | 回复: 30

i = i++; [复制链接]

论坛徽章:
0
发表于 2004-10-22 09:47 |显示全部楼层
public static void main(String[] args){
                int i = 0;
                i = i ++;
                System.out.println("i = " + i);
        }

我想问的是为什么输出的结果是
i = 0

就算是先执行“i = i”,可是i 的自加不还是要执行的吗?

论坛徽章:
0
发表于 2004-10-22 10:04 |显示全部楼层

i = i++;

i++ 表达式的值是0.
你把i++的表达式的值赋给了i
那你说i的值是多少呢???

论坛徽章:
0
发表于 2004-10-22 10:15 |显示全部楼层

i = i++;

这个问题很有意思
你可以去看看编译以后的字节码
看看它是怎么个执行顺序

论坛徽章:
0
发表于 2004-10-22 10:22 |显示全部楼层

i = i++;

如果用i++和++i的话可以看到编译后的bytecode里iinc和iload的顺序不同。

论坛徽章:
0
发表于 2004-10-22 16:32 |显示全部楼层

i = i++;

十分感谢大家,我用javap看了,不管是i = i++;还是i = ++i;其后都有一个istore_1,是用来赋值的吧,对于i++来说堆栈中的0一直都没改过,所以一执行istore_1,就把i的自加给毁了。

论坛徽章:
0
发表于 2004-10-22 17:30 |显示全部楼层

i = i++;

javap是什么东东?

论坛徽章:
0
发表于 2004-10-22 19:35 |显示全部楼层

i = i++;

javap是一个Java类分解工具。它能够将一个类分解为一个字节码的描述,在这些描述中告诉了你在没有进行实际的反编译类之前的一个实现是什么样的。和javac不同,javap使用class文件而不是源文件。

论坛徽章:
0
发表于 2004-10-24 18:12 |显示全部楼层

i = i++;

这个是不是Java本身的BUG。
istore_1是什么意思,出现了两次。

论坛徽章:
0
发表于 2004-10-24 18:31 |显示全部楼层

i = i++;

我明白了。
i=i++;
i++执行的结果在istrore_1中,(是不是这样,请指教)
由于有关“i ”的操作没有了。所以没有再次iload
就是说变量“i”的内存空间里面没有立即改变。
这么解释的话,JAVA似乎有BUG啊。

论坛徽章:
0
发表于 2004-10-24 20:26 |显示全部楼层

i = i++;

i++的情况
iconst_0
istore_1
iload_1
iinc 1,1
istore_1

++i的情况
iconst_0
istore_1
iinc 1,1
iload_1
istore_1
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP