完整的代码不详细写了,下面是关键的部分
int m=2,n=1;
m+=m-=n;
syetem.out.println("m="+m);
int m=2,n=1;
m+=m-=n;
syetem.out.println("m="+m);
解决方案 »
- 问题描述:显示出所有回答错误题目的信息,(题目,用户答案,正确答案)
- 求一条语句的执行流程
- 关于struts框架中request对象获取textfield标签值的问题
- 设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
- java新手 代码在vs.net下能执行 在cmd下执行出现错误
- 各位看官O(∩_∩)O~,最近有个printf的问题搞得我头疼,是关于文字对齐的,望有高手指点!!
- 多線程Socket通信問題
- 新手求助!
- 如何使程序以最大化的方式运行?
- 怎么样在应用程序中播放*。AU文件??????????
- 看不懂得题~谁能帮忙解释下么?
- 如何用循环输出01到99。。。注意不是1到99.。。
m+=m是m=m+m m+m第一个m是上面声明的m 第二个m是m=m-n后的那个m 声明的m初始值是2 第二个m求得1
所以2+1是最后的结果 也就是3
m += m -= n
==》
m = m + (m = m - n)
? = 2 + (? = 2 - 1)
跟楼上一样,结构就是3
关键点就是在m-=n之前 m就已经被载入到堆栈里了
不理解,执行M-=N之后M的值不是变成1了吗?为什么加的时候是用原来的值
m = m + (m = m - n)
难道是+号左边的M先读取为2,然后在算M-N,把这值付给M,使M变成1?然后在相加?
m+=m-=n;
m = m + (m = m -n)
stack={},m=2,n=1
Load m stack={2},m=2,n=1 //m + (m=m-n)中最左边的mLoad m stack={2,2},m=2,n=1 //m-n中的m
Load n stack={2,2,1},m=2,n=1 //m-n中的n
Sub stack={2,1},m=2,n=1 //减
Dup stack={2,1,1},m=2,n=1 //复制结果
Store m stack={2,1},m=1,n=1 //存储m (m=m-n)
Add stack={3},m=1,n=1 //加
Store m stack={},m=3,n=1 //存储m m = (m+(m=m-n))class里 所有计算都是在堆栈中完成的。