免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1536 | 回复: 6
打印 上一主题 下一主题

对于JAVA中运算优先级的疑惑~ [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-03 17:24 |只看该作者 |倒序浏览
写了一年多JAVA 一直没重视优先级问题 今天看到个问题 晕了 感觉好象颠覆了我在C中建立的运算优先级概念 麻烦理解的兄弟给讲解下 谢谢先~

  1. public class A {
  2. public static void main(String[] args){
  3. int i=0;
  4. i=i++;
  5. i=i++;
  6. i=i++;
  7. System.out.println(i);
  8. }

  9. }
复制代码


输出没想到是0

相似的代码 在C中运行就是3

  1. #include <stdio.h>
  2. #include <conio.h>


  3. void main(int argc, char* argv[])
  4. {
  5.    int i=0;
  6.    i=i++;
  7.    i=i++;
  8.    i=i++;
  9.    printf("%d",i);

  10. getch();
  11. }
复制代码


按照C中对优先级的理解。。实在难以理解JAVA的。。

论坛徽章:
0
2 [报告]
发表于 2006-08-03 17:44 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2006-08-03 18:00 |只看该作者
i = 1;i = i++
相当于下面的汇编码
0 iconst_1 ; 把1放到堆栈
1 istore_1 ;从栈顶取出1并存在局部变量1中(也就是变量 i ) 这时候i=1;
2 iload_1 ; 把i的值放到堆栈里去,这时候栈顶为1
3 iinc 1 1 ;把变量1(也就是 i)加1,这时候i = 2咯
6 istore_1 ;呵呵,从栈顶取出1存到i里去,呵呵i又回到1了。
7 return ; 返回。


在网上见到这样的执行步骤.

不过也不太明白,感觉这样很容易混乱别人的思路

[ 本帖最后由 末代地主 于 2006-8-3 18:03 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-08-03 18:34 |只看该作者
原帖由 白色乌鸦 于 2006-8-3 17:44 发表
http://www.cjsdn.net/post/view?b ... y=1&age=0#17340
[/url]

hope that can help you~~


great~ many thanks to u and much appreciation~

it seems because of the JVM implementation, i'v tried in C# and got same answer with JAVA~  it's really tricky and amazing~ anyway, thank u again~

论坛徽章:
0
5 [报告]
发表于 2006-08-03 19:05 |只看该作者
原帖由 末代地主 于 2006-8-3 18:00 发表


在网上见到这样的执行步骤.

不过也不太明白,感觉这样很容易混乱别人的思路


不会呀,我倒是觉得挺明白的

i= i++;

编译后 =>
iload_1
iinc    1, 1
istore_1

而我们以为相当于的
i=i;
i++;

=>
iload_1
istore_1
iinc    1, 1

[ 本帖最后由 白色乌鸦 于 2006-8-3 19:23 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2006-08-03 19:06 |只看该作者
原帖由 非飞云 于 2006-8-3 18:34 发表


great~ many thanks to u and much appreciation~

it seems because of the JVM implementation, i'v tried in C# and got same answer with JAVA~  it's really tricky and amazing~ anyway, thank u again~


客气了,呵呵

:)

论坛徽章:
0
7 [报告]
发表于 2006-08-03 21:54 |只看该作者
i=i++;
先i++,结果为0,然后赋值给i,是0啊,跟c有什么不同吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP