今天碰到一个这样的算术式:int x = 2;int y = 1;请问x+=x-=y输出几了?答案是3,跟C语言不一样。我知道java对基本操作是用栈来实现的,但如果一个数算表达式很长很长,而一般栈是有限的。java会有其他处理方法吗?

解决方案 »

  1.   

    把这个表达式展开了就一目了然了
    x+=x-=y<=>x2=x2-y;x=x+x2;(x2=1,x=2)由于你的x不是static的因此它有多份拷贝,所以x2相当与x一个另一个拷贝,也就是说内存还另给x2开辟了一个空间
      

  2.   

    我补充一点x2=x2-y;的最终结果是x2=1,其实等号后的x2=2
      

  3.   

    好像不是这样的吧,如果先执行x-=y;那么x 的值变为了1,然后在执行x+=x;那么结果应该是2了,但是运行结果确实3.以前学C的时候毫无疑问结果是2,可是java好像在这点上不同于C,java应该是从坐往右执行,而不是想C从右往左执行。
      

  4.   

    有能说下java是怎么用堆栈是实现基本类型和引用的操作??
      

  5.   

    java有GC也就是垃圾收集器。GC会监听每一个变量和引用的动作。
    在合适的时间进行收集。把不需要变量或引用的释放掉,腾出空间。