第一题case后面接的是常量,y和y+1都是变量,final 修饰的变量就是常量。
第二题boolean类型数据默认值是false,注释1和注释2处得if语句都通过,此时b1为true,b2为false,因此注释3处if语句不通过,注释4处是b2=true而不是b2==true,所以通过,x为101.
public class Hello
{
static boolean b1;
static boolean b2;
public static void main(String args[])
{
int x=1;
if(!b1)//1
{
if(!b2)//2
{
b1=true;
}
if(!b1)//3
{
x=x+10;
}
else if(b2=true)//4
{
x=x+100;
}
else if(b1|b2)
{
x=x+1000;
}
}
System.out.pringtln(x);
}
}
1:为什么case y 和case y+1行编译错误
y和y+1是变量,而case的参数只能是常量(而且时编译时就必须初始化的常量)!!所以会报错.报错内容:case expressions must be constant expressions.
2:输出结果101;
流程:开始b1,b2为默认值false(非常不建议用默认值,程序可读性和可维护性低下...)
前2个if后b1为true,b2为false,第3个进不去,问题主要出在第4个else if(b2=true)
{
x=x+100;
}
注意这里if里面是赋值语句不是==判断语句,如为==则输出1001,赋值就是101
明白了吗?
第一题:case后面跟的表达式必须是确定的,即常量,而你的y是个变量,所以报错,你的x之所以没有报错是因为你声明的x为常量
第二题:你只要记住java中boolean类型的变量默认值是false问题就迎刃而解了,也就是说你声明了一个boolean变量但是没有给它赋值,那么它默认的是false……楼主再认真分析下答案就出来了
加油!
1)
因为你定义y的时候,不是final的,而case里面必须是个固定值
修改方法:
public final static int y = 1;加上final关键字即可
2)所有boolean类型默认为false
重点理解在这里,
if (!b1) { //b1 = true
x = x + 10;
} else if (b2 = true) {//b2 = true完成了对b2 = true的赋值,然后再取b的值,此时b为true
x = x + 100;
为什么case y 和case y+1行编译错误 : 需要常量表达式
public class Hello
{
static boolean b1; //默认false
static boolean b2; //默认false
public static void main(String args[])
{
int x=1;
if(!b1) //条件成立
{
if(!b2) //条件成立
{
b1=true;
}
if(!b1) //条件不成立
{
x=x+10;
}
else if(b2=true) //条件成立,这是把b2赋值为true
{
x=x+100; //x=101
}
else if(b1|b2) //前面if已经执行,不执行这个else了
{
x=x+1000;
}
}
System.out.pringtln(x);
}
}