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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

java语言如下:
class Test
{
  public static void main(String[] args)
{
   int i=3;
   i=i++;
  System.out.println("i="+i);
}
编译,运行,输出结果是i=3;
C语言如下:
#include<stdio.h>
void main()
{
  int i=3;
  i=i++;
  printf("i=%d",i);
}
编译,运行,输出结果是i=4;
这是为什么呢?

5 个回复

倒序浏览
问题出现在  i=i++;上面。
已经有人回答过了。我再次拿出来给你说
  同样都是i=i++,为什么得出的结果会有这么大的差异呢?原来是在编译器上出了问题,java的编译器在遇到i++和i- -的时候会重新为变量运算分配一块内存空间,以存放原始的值,而在完成了赋值运算之后,将这块内存释放掉,下面首先看一下如果是j=i++的情况:


原文地址很经典的。http://www.cnblogs.com/dartagnan/archive/2011/06/18/2126876.html


  

  i的原始值存放在后开辟的内存中,最后这个值将赋值给j,这样j=i++后,j就会得到i的值,而i又将自加,所以,在释放内存之后,原来存放j和i的地方将得到值将是:j(此时的值等于初始i值)和i(i自加后的值)。

  明白了上面的问题,让我们接下来看看i=i++的情况:

  

如果是++i/--i,也就没有这么琐碎了,直接在i的原地址基础上进行,不用另开一块内存了;

但是不知道JAVA这么做的原因是什么,如果有知道的朋友,谢谢留言!
回复 使用道具 举报
有可能是java与c的运行机制不一样
回复 使用道具 举报
我知道java i=3的原因,因为是i=i++; 要是i=++i;的话,结果就是4
C语言就不知道了
回复 使用道具 举报
悟空啊,你这个问题,很。。。。
参考:http://baike.baidu.com/view/1747175.htm
回复 使用道具 举报
不同的语言里的运行方式和算数的算法都不一样的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马