黑马程序员技术交流社区
标题:
++ 与 () 的表达式
[打印本页]
作者:
fso918
时间:
2011-10-14 14:01
标题:
++ 与 () 的表达式
class Test{
public static void main(String[] args){
int a = 2;
int b = (a++) + a * 3;
int c = 2;
int d = c + ( c ++ * 3);
int e = 2;
int f = (e++*3) + e;
int x = 2;
int y = x +++ x *3;
System.out.println(b);
System.out.println(d);
System.out.println(f);
System.out.println(y);
}
}
复制代码
输出结果是什么?为什么?
作者:
颜庭飞
时间:
2011-10-14 14:15
结果:
11
8
9
11
int a = 2;
int b = (a++) + a * 3; //(a++)是2,之后a++,所以a是3,b=2+3*3
int c = 2;
int d = c + ( c ++ * 3);//c是2,( c ++ * 3)是6,d是8.之后如果打印C,应该是3
int e = 2;
int f = (e++*3) + e;//e是2,(e++*3)=6,之后e是3 f=6+3
int x = 2;
int y = x +++ x *3;//x是2,++x=3,y=2+3*3
作者:
朱华
时间:
2011-10-14 16:44
本帖最后由 朱华 于 2011-10-14 16:45 编辑
纯手打,请区分。
明确几个概念:
+ - 其实这个加号在JAVA中有点重写的意味,比如int + int 和String + String 代表的意思是不一样的,前者是数值相加,后者是字符串内容相组合。
++ -遗传自C语言的语法,表示变量的自增,当它所处的位置不同时表示的意义也略有不同,int a = 1;syso(a++);a++代表的是先使用,后自增,打印结果为 1,syso(++a)代表的则是先自增,后使用,打印结果为2.
+++ -这涉及到运算顺序,a +++ b等同于(a++) + b,如果你将a +++ b 变为了 a + ++ b 那将等同于 a + (++b)
() -在赋值运算中,()的意义与它的数学运算中的意义一样,使括号中的运算式的优先级变为和 * / 一样,更详细JAVA运算顺序我不想去网上复制一大堆然后发给你看,毫无意义,自己主动搜索来的记忆会更深。
好了,有了以上的概念我们可以开始做题了,我们把每个式子拆解成步骤来看:
int a = 2;int b = (a++) + a * 3; -- (1)a自增,但是此处的a数值未变,改变以后的数值将在此后生效 (2)a*3=9 (3)b = 2 + 9
int c = 2;int d = c + ( c ++ * 3); -- (1)c自增 (2)d = c + (2 * 3) (3) d = 2 + 9
int e = 2;int f = (e++*3) + e; -- (1)e自增 (2) f = (2 * 3) + e (3)f = 6 + 3
int x = 2;int y = x +++ x *3; -- (1)式子等效于y = x++ + x * 3 (2)x自增 (3)y = 2 + x * 3 (4) y = 2 + 3 * 3
作者:
fso918
时间:
2011-10-14 18:49
我认为楼上的不大准确。或者不大透切。
我认为:
所谓的运算符,在java里就等同于一个方法,所以每个运算符都有返回值。就像 a+b就返回a与b的和。
同样的 小括号()也是一种运算符,也有它的返回值。
两个加号后置变量后,是说这个变量先用其自身的值作其所参加的运算,作完它所参加的运算后,再自增一。
所以,前面3个例子的括号里的变量先进行其自身锁参加的运算,而其在括号里,所以其参加的运算就局限在括号里。
所以括号运算就将其括号里的运算结果作为括号运算的结果返回,以供外部的运算使用。而括号返回 值以后,括号里变量锁参加的运算就算完了,所以括号运算返回后
会结算后置的++运算,即变量的值自增。所以例1里,括号运算完后,a就为3了。
例4 等效于 x+ (++x*3).因为优先级的++a比a++先。
另外
int q = 2;
int w = q + (q++) + q * 3;
w为多少呢?
我们习惯的运算顺序是
假设算式为 a + (c + d ) +e;
先计算 c + d 的值,然后将这个值和 a 相加,再将所得的值和 e 相加。计算机却不是这样的。
作者:
zhangxinxin
时间:
2011-10-14 19:42
结果在电脑上做一遍就出来。至于原因,这里涉及到两个问题。
1.++算法
比如定义一个变量 int a;
a++:当a++参与运算时,先拿a参与运算,然后自身增加1,即a=a+1;
2.变量优先级
关于运算符优先级,在上面题目中出现的符号中,运算符号的优先级依次从大到小为:() , ++ , * , +
弄明白这两个问题,这道题基本上就搞定了。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2