sun 公司2006年的一道面试题:下面程序运行结果是多少?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方法调用是传真调用,故执行完inc.fermin(i)后,i依然为0,但执行i=i++;即先把i的值赋给i,之后再执行自加,应该是0赋给了i,再自己为1。但通过实际运行也确实结果如答案所说为0.求解释!!

解决方案 »

  1.   

    你写成
    int i=0;
    int j=i++;
    int i=j;
    就能理解了吧
      

  2.   

    i=i++等于int temp = i;
    i++;
    i=temp;
      

  3.   

    要知道i++和++i的区别
    i++是先使用i在使i的值加1;而++i是先使i的值加1,在使用i
      

  4.   

    用javap反编译可以看到:
    i=i++对应于
    10:  iload_2       ;将i的值0加载到操作数栈
    11:  iinc    2, 1
    14:  istore_2      ;将栈中的值0储存到局部变量i