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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 马嘉 中级黑马   /  2014-10-9 19:50  /  1446 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

                int x = 4;
                int y = 5;
                if(x++>4 & ++y>5) {
                        x++;
                }
为什么x=5,不是等于6呀,求大神解答

评分

参与人数 1技术分 +1 收起 理由
杨佳名 + 1 淡定

查看全部评分

11 个回复

倒序浏览
  1. public class Test3 {
  2.         public static void main(String[] args) {
  3.                  int x = 4;
  4.              int y = 5;
  5.              if(x++>4 & ++y>5) {  //判断条件成立的话
  6.                      x++;                        //x++   就是4+1   等于5
  7.              }
  8.              System.out.println(x);  //等于5
  9.         }
  10.        
  11. }
复制代码
回复 使用道具 举报
楼主在if后面加一条else语句改一下x的值。然后自己看看顺序琢磨一下
回复 使用道具 举报
&:        无论左边是true是false,右边都运算.
&:        两边或者一边false, 结果是false, 两边都true ,结果为 true
if(x++>4 & ++y>5) 这句 x和 y 都会运算,   因为 x++  , x 先比较 然后再+, 所以 4>4 不成立,
但是 x 比较完 还是会 x++, 这个是 if(x++>4 & ++y>5) 这个语句的x++, 条件不成立, if 里面的 内容(x++) 不会计算, 所以x = 5
回复 使用道具 举报
因为当x=4时候,if已经停止了循环,只调用了一次x++,所以x=5
回复 使用道具 举报
香草芭芙 发表于 2014-10-9 20:58
&:        无论左边是true是false,右边都运算.
&:        两边或者一边false, 结果是false, 两边都true ,结果为 true
if(x ...

说的太好了,想起了C语言二级什么的,尽搞这些++,--的问题
回复 使用道具 举报
zz_job 中级黑马 2014-10-9 21:34:09
7#
这个简单   因为执行到if条件的时候,也就是判断x++>4这一步的时候,x++是先比较再++,所以条件不满足,这时,再对x进行++,此时x=5了,但是也晚了.因为&运算有假即为假==>所以if语句就停止了,也就是后面的x++根本没执行到  这样
回复 使用道具 举报
高泳 中级黑马 2014-10-9 21:43:13
8#
if里面的语句没有执行
回复 使用道具 举报
因为是先进行X>4的判断,在去++的。
回复 使用道具 举报
马嘉 中级黑马 2014-10-10 09:17:13
10#
香草芭芙 发表于 2014-10-9 20:58
&:        无论左边是true是false,右边都运算.
&:        两边或者一边false, 结果是false, 两边都true ,结果为 true
if(x ...

你的意思是这个for根本就没成立,为什么想x++会先用x>4先比较,然后在自增,而++y,是不是就进行自增在比较,您在跟我说说被
回复 使用道具 举报
马嘉 发表于 2014-10-10 09:17
你的意思是这个for根本就没成立,为什么想x++会先用x>4先比较,然后在自增,而++y,是不是就进行自增在比 ...

++在前 表示先加后用。++在后 表示先用后加。
回复 使用道具 举报
zhappy 中级黑马 2014-10-10 10:50:28
12#
判断以后,i就加了一,但是条件不满足,if语句不执行,所以i=5
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马