黑马程序员技术交流社区

标题: 自加,自减 [打印本页]

作者: 风飘逸    时间: 2015-3-24 21:30
标题: 自加,自减
int num = 1;boolean b =( num++ == 2),为什么是false,但是num的输出值是2
作者: Hksangs    时间: 2015-3-24 21:50
加号在后面,先参与运算再子增的。
作者: @G00DMaN    时间: 2015-3-25 00:25
num++这个表达式具有1这个值,1 == 2不成立,所以b的值为false,num++还有一个副作用就是num的值为2,
作者: 浓眉小眼    时间: 2015-3-25 00:57
boolean b =(( num++) == 2)
这样写就好了,安心,不用担心那个先的问题
作者: 罗晓飞    时间: 2015-3-25 08:23
下一次才会自加。。。
作者: 青默    时间: 2015-3-25 09:08
++num就解决了 ,先+在==
作者: nether009    时间: 2015-3-25 10:05
加号在后 先用后加的
作者: natsu647    时间: 2015-3-25 11:48
++num ;//先自加,再参与运算
num++ ;//先参与运算,再自加

boolean b =( num++ == 2);
可以等效于
boolean b =( num == 2);
num = num + 1 ;
作者: ws748264    时间: 2015-3-25 12:15
加号在后面,先运算再自增的
作者: One_M    时间: 2015-3-25 12:25
num 先判断==2 ?? 然后在自增1  所以 1==2 false
作者: 超级小白    时间: 2015-3-25 12:44
① ==运算是在栈内存中进行的。boolean b的值是在栈内存中被赋予的。
② ++运算不需要入栈,就是说不经过栈内存。( 直接给变量num进行自增运算,是在储存变量的方法区中进行的。所以num的值是在方法区中改变的。)
③ 运算优先级请参照书上表格。
④栈内存里存的值都是临时的,当进行下一行代码时,上一行代码的变量在栈里就被清空了。
⑤但之所以你可以在后面代码取到上一行的变量的值,比如打印System.out.print(num); 是因为“=”的赋值操作,会把栈里的变量值存放到了方法区里。这样就达到了持久存放的目的。

暂时看不懂不要紧。等学完java基础之后,就能明白这些了。
作者: 邓熊财    时间: 2015-3-25 17:52
先在大括号里算完num==2以后再才加1的
作者: 福娃51zx    时间: 2015-3-25 19:11
因为先输出再加1,即先比较再加1,把num++改成++num就输出true
作者: luoyu1530    时间: 2015-3-25 22:42
这个要看自加和自减是在哪
在前面,先加/减。在运算,在后面,先运算,在加/减




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