黑马程序员技术交流社区
标题: ++ 的疑惑 [打印本页]
作者: 三生石 时间: 2014-3-7 22:36
标题: ++ 的疑惑
例子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
为什么?
作者: 房建斌 时间: 2014-3-7 23:06
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;
作者: Sage 时间: 2014-3-7 23:10
首先,++在前,先运算再赋值;++在后,先赋值再运算。
例子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,主要在于前者是先赋值,后者是先运算,多做点类似的题目就好理解了。
作者: 郝大龙0104 时间: 2014-3-7 23:14
例子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++ 是先赋值在计算
作者: 何清林 时间: 2014-3-7 23:40
这两个例子我一个个解释:
例子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
作者: 小脚印 时间: 2014-3-7 23:57
++ 为自加运算,当++在变量前时,先自加1然后再赋值给变量;
当++在后时,先赋值再自加
[code]
int a= 1;
a = a++;//运行过程为:a=a;a++(a=a+1=2)
System.out.println(a); // 等于1
例2 按这样分析就可以~~
作者: chenfc8578 时间: 2014-3-8 00:04
前自增:++x 自增变量先自增再参与表达式运算
int x = 1,y=1;
y=++x;
结果:x = 2,y = 2;
后自增:x++ 自增变量先参与表达式运算再自增
int x=1,y=1;
y=x++;
结果:x = 2.y = 1;
作者: 戚兴海 时间: 2014-3-8 00:18
第二个好理解,第一个还真容易弄错
a=a++;
的确是先赋值,再自增的啊,赋值完了之后,再+1,怎么还是1呢。。。求具体解释,前后2个a不是同一个引用了?
作者: 一诺千金 时间: 2014-3-8 11:28
int m=(a++)+(a++); 从右往左好理解一点,+右边的a++是5,左边的是6
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |