int a=10;a=a++;a为什么是10

 我来答
极夜_安雨
2016-07-11 · TA获得超过585个赞
知道小有建树答主
回答量:465
采纳率:66%
帮助的人:191万
展开全部

你好,根据实际操作,a在赋值的时候就已经完成运算,一旦赋值之后,=号右边的操作数将不再运算。

也就是说a++先运算后自增,先赋值,a=10++,而此时赋值运算已完成,计算机认为计算已经结束,10++就不再做运算了。

假如++a,就不一样了,先自增后运算,如果改成++a,那么a最终结果将是11.

如有疑问,欢迎追问。

更多追问追答
追问
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。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0b3b4d7
2016-07-11
知道答主
回答量:28
采纳率:0%
帮助的人:6.9万
展开全部
a++ 单独使用 就是原值a
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式