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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 风飘逸 中级黑马   /  2015-3-24 21:30  /  1307 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

int num = 1;boolean b =( num++ == 2),为什么是false,但是num的输出值是2

13 个回复

倒序浏览
加号在后面,先参与运算再子增的。
回复 使用道具 举报
num++这个表达式具有1这个值,1 == 2不成立,所以b的值为false,num++还有一个副作用就是num的值为2,
回复 使用道具 举报
boolean b =(( num++) == 2)
这样写就好了,安心,不用担心那个先的问题
回复 使用道具 举报
下一次才会自加。。。
回复 使用道具 举报
++num就解决了 ,先+在==
回复 使用道具 举报
加号在后 先用后加的
回复 使用道具 举报
++num ;//先自加,再参与运算
num++ ;//先参与运算,再自加

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

暂时看不懂不要紧。等学完java基础之后,就能明白这些了。
回复 使用道具 举报
先在大括号里算完num==2以后再才加1的
回复 使用道具 举报
因为先输出再加1,即先比较再加1,把num++改成++num就输出true
回复 使用道具 举报
这个要看自加和自减是在哪
在前面,先加/减。在运算,在后面,先运算,在加/减
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马