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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 最好的我 中级黑马   /  2015-4-22 19:29  /  520 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

第一题

int x = 1,y=1;

if(x++==2 & ++y==2)
{
        x =7;
}
System.out.println("x="+x+",y="+y);//为什么x=2,y=2


---------------------------------------------------
第二题
int x = 1,y = 1;

if(x++==2 && ++y==2)
{
        x =7;
}
System.out.println("x="+x+",y="+y);//为什么x=2,y=1

---------------------------------------------------

第三题
int x = 1,y = 1;

if(x++==1 | ++y==1)
{
        x =7;
}
System.out.println("x="+x+",y="+y);//为什么x=7,y=2


---------------------------------------------------

第四题
int x = 1,y = 1;

if(x++==1 || ++y==1)
{
        x =7;
}
System.out.println("x="+x+",y="+y);//为什么x=7,y=1


第五题
int x = 2,y=3;

switch(x)
{
        default:
                y++;
        case 3:
                y++;
        case 4:
                y++;
}

System.out.println("y="+y);//y=6

4 个回复

倒序浏览
首先要搞清楚的是:
                x++是先取值,再运算。
                ++y是先运算,再取值。
                “&”两边的表达式都会被执行。
                “&&”两边的表达式,只有在左边的返回true时才会接着执行右边的。最后进行与运算。
                “|”和“||”也有这个区别。只不过这两个是进行或运算,使用“||”时,前面的表达式返回true时,后面的表达式不再执行。
分析如下:
第一题:程序运行到 x++==2 & ++y==2
                此时x取到的值就是初始化的值1(因为内存中为1)。然后再自增1(内存中的值变为2)。
                所以1==2是fasle。
                此时y的值在内存中为1(初始化的值),先运算,就是1自增,变为2,再取值就得到2。所以2==2为true。
                flase&true得到false。不会进入if语句的代码块中。而是执行if代码块后面的语句,打印出结果。
第二题:因为使用了“&&”,而且x++==2为false,所以++y==2不会被执行,y的值依然为初始值1,x的值为运算后的2。与运算结果为false,与第一题相同。

第三题:x++==1 为true。因为使用的是“|”,++y==1也会被执行。所以y为2。++y==1为false。或运算后,得到true。
             进入if代码块,x被赋值为7(x=7)。结果为:x=7,y=2。

第四题:因为使用了“||”所以,++y==1没有执行,y的值为初始值1。或运算结果为true。x被赋值为7。结果为:x=7,y=1。

第五题:switch语句中的case和default没有特定的顺序要求。所以程序可以执行。
              但是在switch语句执行时,始终会先执行case,当case中没有条件满足时,才会执行default中的语句。
              在case语句中遇到break;时会终止switch语句。如果没有break;会执行到switch语句块最后,也就是大括号“}”。
          分析:x=2,进入switch,找到case 3,不满足,继续向下,case 4,不满足。所有case都不满足,执行default。y++得到4。  但是default中没有                              break;而且接下来的不是switch的“}”,此时程序继续执行下面所有可执行的代码,y++得到5,再y++得到6。




如有问题,欢迎指正。{:3_63:}


回复 使用道具 举报
if中只要执行到了,不管是true还是fault,其++都是要加的
回复 使用道具 举报
谢谢楼上分享,复习了一下。
回复 使用道具 举报
最基础的运算题
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马