int a=10;a=a++;a为什么是10
4个回答
展开全部
更多追问追答
追问
a++在java内存中怎么运作的呢,还有赋值结束就表示结束这是规定么,
追答
(分析中【】表示栈,栈的底端在左边,顶端在右边):
0:将常数10压入栈,栈内容:【10】
1:将栈顶的元素弹出,也就是10,保存到局部变量区索引为为1(也就是变量a)的地方。栈内容:【】
2:将局部变量区索引为1(也就是变量a)的值压入栈,栈内容:【10】
3:将局部变量区索引为1(也就是常量a)的值加一,此时局部变量区索引为1的值(也就是a的值)是11。栈内容:【10】
6:将栈顶元素弹出,保存到局部变量区索引为1(也就是a)的地方,此时a又变成了10。栈内容:【】
7:获取常量池中索引为2所表示的类变量,也就是printf()。栈元素:【】
10:将局部变量区索引为1的值(也就是a)压入栈。栈元素:【10】
11:调用常量池索引为3的方法,也就是printf.
14:返回main方法
刚刚解释错了,找了下资料,实际上是先运算了a++表达式再赋值的,相当于:
int a = 10;
a = a++;//等效于下面的语句:
int temp = a;//这个temp就是i++这个表达式的值
a++; //i自增
a = temp;//最终,将表达式的值赋值给i
资料来源:http://www.ticmy.com/?p=43,虽然是java,但是计算机运行原理机制都是相通的。
如有疑问,欢迎追问。
2016-07-11
展开全部
因为int型为有符号的两个字节,即a=10化成二进制为0000,0000,0000,1010;再取反,即为1111,1111,1111,0101这就是b!此时将b化成10进制为-32757。但在输出时系统自动化为-32768+32757=-11保存
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2016-07-11
展开全部
谁说是10了,代码结束时a已经是11了。
代码相当于:
int a=10;
a=a;
a++;
此时a结果11。
代码相当于:
int a=10;
a=a;
a++;
此时a结果11。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
a++ 单独使用 就是原值a
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询