CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

再论i++.

楼主wweigh(先倒)2001-07-05 09:07:50 在 Java / J2SE / 基础类 提问

 
  public   class   Test   {  
   
      public   static   void   main(String[]   args)  
  {  
          int   i   =   0;  
          i   =i++;  
          System.out.println(i);  
          int   a=i++;  
          System.out.println(a);  
  }  
  }  
  此时i,a为多少?好象i++是有点问题 问题点数:20、回复次数:18Top

1 楼ender(ender)回复于 2001-07-05 09:13:36 得分 0

i   =   0;  
  a   =   0;Top

2 楼karma(无为MS MVP)回复于 2001-07-05 09:13:38 得分 0

x=i++相当于:  
  int   temp;  
  temp   =   i;  
  i=i+1;  
  x=temp;  
  所以,  
  i=0;  
  i=i++;==>  
  temp=0;  
  i=1;  
  i=temp;   ==>   i=0;  
   
  and  
  a=i++;   ==>  
  temp   =   0;  
  i=1;  
  a=temp;   ==>   a   =   0;  
   
   
   
   
  Top

3 楼kuqi(苦青)回复于 2001-07-05 09:17:21 得分 0

没什么错的了,++     的优先级比=高,所以先运行i++,但是i=i++;执行的操作是把运行以前的值赋给i,所以应该是0,而   a当然肯定是0了Top

4 楼ender(ender)回复于 2001-07-05 09:19:39 得分 0

:)  
  其实关于i++,所有的书都说得很清楚啊……  
  i++以后,i=1,但i++这个表达式的值仍然是0啊……  
  所以i=i++,i仍然是0……Top

5 楼luodi(无知者无畏)回复于 2001-07-05 09:29:54 得分 0

其实理解这个问题的核心就在于:表达式也有值,   i++   是一个表达式,它的值与表达式计算完后i   的值是两回事。Top

6 楼I_am_me(你好)回复于 2001-07-05 10:27:01 得分 10

这个问题我在181782.shtml中有叙述,请看Top

7 楼zhanghw(zhanghw)回复于 2001-07-05 10:35:42 得分 0

完全同意   无知者无畏   的意见   清楚的不能再清楚了Top

8 楼gdsean(摇滚java)回复于 2001-07-05 10:47:55 得分 0

i   =i++;是先运算再自加一  
  如果i=0,i++加一的效果哪里去了  
  i++在=运算时先把i=0;然后加一,  
  那么i好象该是1了,i只有一个地址  
  temp=i++就不同了,这里temp就是0  
   
  Top

9 楼luodi(无知者无畏)回复于 2001-07-05 11:16:58 得分 0

  i   =   i++;   这个语句就是:  
    temp   =   i++;  
    i   =   temp;  
  这两个语句同样效果的简写,   i++   的效果为什么一定要存在呢?  
  Top

10 楼gdsean(摇滚java)回复于 2001-07-05 11:26:47 得分 0

i++等于i=i+1  
  i=i++这句先执行=  
  所以i=0;  
  然后执行i++  
  所以i=1  
  luodi请指点  
  Top

11 楼wweigh(先倒)回复于 2001-07-05 11:30:27 得分 0

c   中好象应该是1Top

12 楼wweigh(先倒)回复于 2001-07-05 11:35:33 得分 0

i=i++时i的确为0,但在println输出时,i的值已经变了才对呀?起码C中是这样。  
  Top

13 楼luodi(无知者无畏)回复于 2001-07-05 11:38:58 得分 0

为什么你认为会先执行   =   ?  
  在Java/C/C++   以及任何一种有   ++   这个运算符的语言中,   ++   这个运算符都比   =   这个运算符优先级高,所以一定会先执行   ++,   记住,   =   没什么特别之处,只是一个运算符!Top

14 楼stellaxyq(汐)回复于 2001-07-05 11:45:14 得分 10

对楼上的  
  i++,和++i的区别在于,前者是先取i值,在进行++,后者是先++在取i值,=是没什么特别的  
  但++是特别的  
  单独用的话i++,和++i没区别  
  但在表达式里面的话就要小心了Top

15 楼bobosji(波波司机)回复于 2001-07-05 12:12:09 得分 0

我最看重的结果,刚才实验了,结果:  
  0  
  0  
  Top

16 楼I_am_me(你好)回复于 2001-07-05 12:27:59 得分 0

c/C++中  
  int   i=0;  
      int   man[2];  
      man[printf("%d\n",i)]=(i++)+(i++)+(i++)+(i++)+(i++);  
  得到0  
  说明i++在赋值语句后计算,而不是表达式后计算      
   
    Top

17 楼luodi(无知者无畏)回复于 2001-07-05 12:29:59 得分 0

你说的情况可能是C/C++编译器表达式优化的结果。  
  Top

18 楼MicroDirt(微尘)回复于 2001-07-05 12:45:58 得分 0

0+0+0+0+0=0Top

相关问题

  • 再论vtpr
  • 再论乱码。
  • 急!再论视图
  • 再论XP风格!
  • 再论C++对象模型
  • 再论屏蔽Dialog的OK,Cancel
  • 关于再论DELPHI的优缺点!!
  • 再论goodgoodgood与111222的关系~~~~
  • 再论怎样控制窗口状态?
  • 再论英勇无敌的军

关键词

  • c/c++
  • 语句
  • 执行
  • 效果
  • 表达式
  • 运算符
  • 值
  • temp
  • 计算
  • 没什么

得分解答快速导航

  • 帖主:wweigh
  • I_am_me
  • stellaxyq

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo