您的位置:首页 > 其它

i++和++i为毛会不一样

2015-08-16 14:36 197 查看
今天看到一道java面试题:

package algorithms.com.guan.javajicu;
public class Inc {
  public static void main(String[] args) {
    Inc inc = new Inc();
    int i = 0;
    inc.fermin(i);
    i= i++;
    System.out.println(i);
  }

  void fermin(int i){
    i++;
  }
}

输出的结果是0.网上有解释说:java是先把i的值赋给temp,然后实现自加,加完以后返回temp给i,所以会覆盖掉i加了之后的值。然后举了个例子说C语言不是这样,亲测一把C的,结果如下:

#include<stdio.h>

main(){
  int i = 0;
  i = i++;
  i = ++i;
  printf("i=%d\n",i);
}

输出结果为:1.

和网上的解释不符合,汇编一把->


执行i++的时候,执行了如下步骤:

将i的值取出放到寄存器EAX里 -> EAX的值加1后放到EDX里 -> 将EDX的值放回i中 -> 返回EAX的值给前方赋值变量,所以取得的值都是i自增之前的值(而在i=i++中,又将EAX的值赋给了i,所以i已经自增过的值会被原先的值给替换掉)

在执行++i的时候,就简单的多:

一步到位,就是add &i,1;

测试环境:windows 7, 64-bit, GNU GCC编译器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: