黑马程序员技术交流社区

标题: 我知道先a++先给值,我就想知道最后的++完了后的11跑哪里.? [打印本页]

作者: wawsc5354524    时间: 2014-8-7 01:15
标题: 我知道先a++先给值,我就想知道最后的++完了后的11跑哪里.?
本帖最后由 wawsc5354524 于 2014-8-7 01:32 编辑

class Text
{
     public static void main(String[] args)
{
   int a=10;
  a=a++;
   System.out.println("a");
}
}




请问为什么最后输出是10?而不是11,请详细的解释一下步骤,小弟新手

作者: cheye0207    时间: 2014-8-7 01:28
a++先给值再加1,++a先加1再给值
作者: icris    时间: 2014-8-7 01:28
遇到问题要先在心里默念“不复杂不复杂不复杂”心态好就好解决了。
你看,一个赋值语句,把 10 赋给 a ,赋完值 a 就是 10 了

作者: wawsc5354524    时间: 2014-8-7 01:29
cheye0207 发表于 2014-8-7 01:28
a++先给值再加1,++a先加1再给值

那最后又++了啊,为什么a的值没有变?
作者: wawsc5354524    时间: 2014-8-7 01:32
icris 发表于 2014-8-7 01:28
遇到问题要先在心里默念“不复杂不复杂不复杂”心态好就好解决了。
你看,一个赋值语句,把 10 赋给 a ,赋 ...

可是最后又++了啊,那个a值跑哪里去了、?
作者: cheye0207    时间: 2014-8-7 01:32
x=a++;
a=x;
楼主的语句也可以这么写吧
作者: wawsc5354524    时间: 2014-8-7 01:33
cheye0207 发表于 2014-8-7 01:32
x=a++;
a=x;
楼主的语句也可以这么写吧

这是一个孩子提出来的问题,感觉有点奇怪,所以就拿上问问大家
作者: icris    时间: 2014-8-7 01:43
wawsc5354524 发表于 2014-8-7 01:32
可是最后又++了啊,那个a值跑哪里去了、?

一个赋值语句,赋值操作一定是最后执行的(吧)
所以应该是先得到结果 10 再 a++ 再把 10 赋给 a
作者: 杨庆雷    时间: 2014-8-7 02:00
1、int a=0;a=a++;
生成的字节码是:
0 iconst_0 -----0压入栈顶
1 istore_1 [a] -----栈顶值(0)存入局部变量1(a)
2 iload_1 [a] -----变量1的值压入栈顶(值为0)(a++效果)
3 iinc 1 1 [a] -----变量1自加(a++操作,自加后变量1的值为1)
6 istore_1 [a] -----将栈顶值(0)存入变量1(=操作)
a的值依次变化为:0->1->0
作者: 반야_바라_밀    时间: 2014-8-7 07:18
我感觉这段代码的运行是这样的,a++,此时a的值为10,将其传出去,然后++,a=11,最后把10赋给a,结果a又从11变成了10.
作者: Bermuda     时间: 2014-8-7 07:46
本帖最后由 Bermuda  于 2014-8-7 07:49 编辑

int a=10;
a=a++;
其实是两个步骤:
赋值:a把10赋给了a,
加一:a+1
***加完了a就是11了,执行下面的语句

如果是
a=++a;
两个步骤:
加一:a+1
赋值:把(a+1)的值赋给a

像是for循环,你可以试试,a++跟++a循环次数是不一样的
for(int a=1;a<=5;a++)
//一共循环5次

for(int a=1;a<=5;++a)
//循环4次,第一次进循环a就等于2了,然后在执行for里的操作

***就把它看成两个步骤就好了 后加加后加1,前加加先加1

作者: 格子、    时间: 2014-8-7 08:33
运行步骤的是这样的:
首先int a = 10,给a赋初值为10
a=a++,由于++运算符在后,所以先加后用,先把10的值重新赋给a,在执行++操作,由于=运算符已运行不再作用,故a的值为10,并未重新赋值!

想看到不一样的结果,把赋值运算去掉即可,不管a++还是++a;最后打印结果都为11.
作者: 明2012    时间: 2014-8-7 08:38
前来学习的
作者: 李章敏    时间: 2014-8-7 09:28
表达式a=a++的运算过程是先将a的指赋予a!即先运行a=a,再自动加1,这里加1只是作为返回值出现,并没有赋给a!
作者: lcl    时间: 2014-8-7 09:36
自增运算符在后面就是先执行运算,运算完再自增;a=a++    a先执行赋值运算,把10赋给左边a,然后变成11,但是输出的是接收赋值的a,不是自增后的a,所以是10




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2