黑马程序员技术交流社区
标题:
值为什么是这个呢?
[打印本页]
作者:
最好的我
时间:
2015-4-22 19:29
标题:
值为什么是这个呢?
第一题
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
作者:
IDhmpj
时间:
2015-4-22 21:38
首先要搞清楚的是:
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:}
作者:
18561271203
时间:
2015-4-22 21:59
if中只要执行到了,不管是true还是fault,其++都是要加的
作者:
fanxia_2007
时间:
2015-4-22 22:13
谢谢楼上分享,复习了一下。
作者:
lai19
时间:
2015-4-22 22:25
最基础的运算题
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2