程序一:
int c = 10;
int d = c++;
System.out.println(c);
System.out.println(d);
程序二:
int c = 10;
c = c++;
System.out.print(c);
问题:
程序2中的2个C是不是同一个C?
程序2的++运算执行了吗?怎么执行的?在何时执行的?
程序一中,输出了c自增后的结果,在程序2中,想输出c自增后的结果怎么输出?

解决方案 »

  1.   

    程序2中的2个c是同一个c
    c++执行了 c = c++; //先右运算,把右边表达式的值(表达式的值就是c的值)压栈保存,然后执行c++,此时右边运算结束,然后左边预算,把右边的表达式的值出栈,然后赋给c,这样就造成了c的值又变回原来的值了
    要想达到1的效果,改称 c=c+1或者直接c++
      

  2.   

    可以看下java虚拟机一类的资料
      

  3.   

    是同一个C
    ++运算执行了,c=c++首先执行c++,c增加,然后将c未加1前的值传给c,c知又回到未加1签了。把c++换成++c就ok
      

  4.   

    c++.是你先把这个c当前的值那过来用再加。譬如int c=0;if(c++>0){“不进来”}这个方法体是不会进去的
    ++c。是先加后用。int c=0;if(++c>0){“进来”}
      

  5.   


    +1 正解。你那个c = c++   ,怎么说呢,c在被创建出来之后就被赋值了,然后你的这个自增运算c++
    修改了c的那个位置上的值,接着你又将它赋给了c,那感觉没什么意义,因为仅仅是覆盖罢了。
    直接c++ ;   不就行了吗?
      

  6.   

    c = c++;个人理解这一句是无效的代码,这一句相当于c=c;c++;c=c这一句编译的时候会给警告提示对变量c的赋值不生效。所以相当于是无效的代码,最后打印出c=10;如果改成j=c++;再print(c)就是11
      

  7.   

    程序2中的两个c的值是一样的,++执行了,在把c的值赋给c后自增1,要输出自增后的值把c++改成++c
      

  8.   

    我明白你的疑惑,你应该这样理解,假设c的值是5
    等号的右边是个表达式: c++
    而这个表达式的值是5,此时c的值是6了,但是,问题来了,你的运算还没结束,你要给等号左边的c赋值,那就是把5赋给c了
      

  9.   

    你想问的,《java解惑》都给你解答了,只是你不去看http://hi.baidu.com/freish/blog/item/aa947f8b42c4e118c9fc7a07.html
      

  10.   

    c=c++如果是循环的话;第一次训环先执行c的值,第二次执行的就是c+1的值也就是c++;
    ++c就是c的值先加1;在输出c的值