A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 三生石 中级黑马   /  2014-3-7 22:36  /  1253 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

例子1:
int a= 1;
a = a++;
System.out.println(a); // 等于1
例子2:
int a=5;
int m=(a++)+(a++);
System.out.println(a + ", " + m); // 等于7, 11
为什么?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

8 个回复

倒序浏览
a = 5;
int m=(a++)+(a++);
第一步 a++ = 5;  a = 6; ++在变量后面就是先返回当前值,然后本身再加1.
第二 a++ = 6 ; a = 7; 执行这里的时候a是6,所以先返回6,a才等于7的。
第三 m = 5 + 6 = 11; 最后的加法就是第一个括号返回值(5) + 第二个括号返回值(6)的结果 = 11了
a = 7;




评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
首先,++在前,先运算再赋值;++在后,先赋值再运算。
例子1中,a初始值为1,a = a++;先将右边的a(1)赋值到左边的a那里,再自身+1,注意这里输出的是左边的a,所以a为1;
例子2中,a初始值为5,m = (a++) + (a++) ;按照算术规则,从左往右的小括号运算,第一个a++,将a(5)赋值给m,自身+1,此时m = 5, a = 6;再进行第二个a++,m +=(a++),将a(6)赋值并+原来的m(5),即m=11,而后a(6)自身+1,a=7。
注:例子2中的a++和a=a++是有区别的,要理会清除,不管是a++还是++a,都会执行一次自身+1,主要在于前者是先赋值,后者是先运算,多做点类似的题目就好理解了。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
例子1:
int a= 1;
a = a++;
System.out.println(a); // 等于1
a++  这是个式子  它的值是  1   运算完啦  a=2
例子2:
int a=5;
int m=(a++)+(a++);
System.out.println(a + ", " + m); // 等于7, 11
a++ 这个和上边的一样  这个式子值为 5  计算完啦  a=6   然后 后面的a++ 值为6  计算完啦 a=7

这两个例子的知识点就是:
++i  是先计算在赋值
i++  是先赋值在计算

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
这两个例子我一个个解释:
例子1:
int a= 1;   
a = a++;    //把a=1先赋值给a再a++,结果a=1
System.out.println(a); // 等于1
例子2:
int a=5;
int m=(a++)+(a++);   //第一个a++ 等于、、先返回5,再+1;第二个a++等于、、先返回6,再+1——》a=7
System.out.println(a + ", " + m); // 所以等于7, 11

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
++ 为自加运算,当++在变量前时,先自加1然后再赋值给变量;
当++在后时,先赋值再自加
[code]
int a= 1;
a = a++;//运行过程为:a=a;a++(a=a+1=2)
System.out.println(a); // 等于1
例2 按这样分析就可以~~

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
前自增:++x  自增变量先自增再参与表达式运算
int x = 1,y=1;
y=++x;
结果:x = 2,y = 2;

后自增:x++  自增变量先参与表达式运算再自增
int x=1,y=1;
y=x++;
结果:x = 2.y = 1;

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
第二个好理解,第一个还真容易弄错
a=a++;
的确是先赋值,再自增的啊,赋值完了之后,再+1,怎么还是1呢。。。求具体解释,前后2个a不是同一个引用了?

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

回复 使用道具 举报
int m=(a++)+(a++);   从右往左好理解一点,+右边的a++是5,左边的是6
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马