为什么case标签必须是常量表达式,如果我们提供变量作为case标签,编译器将引发编译错误

时间:2016-05-31 12:24:09

标签: java switch-statement

以下是存在常量变量的代码
为什么案例标签必须是常量表达式,如果我们提供变量作为案例标签,编译器将引发编译错误

 Class Test
    {
    public static void main(String[] args )
        {
            int a =10 ,b=20 ,c=30 ; //Here i give constant value
            switch(a){

            case a : System.out.println("10");
                    break;
            case b : System.out.println("20");
                    break;
            case c : System.out.println("30");
                    break;
            default : System.out.println("Default Statement ");
                    }
        }


    }

2 个答案:

答案 0 :(得分:0)

来自Oracle认证(OCA)培训文档:

交换机和案例的法律声明

switch语句的一般形式是

switch (expression) {
  case constant1: code block
  case constant2: code block
  default: code block
}

一个case常量必须求值为switch表达式可以使用的相同类型,还有一个附加和大约束:case常量必须是编译时常量!由于case参数必须在编译时解析,因此只能使用一个使用文字值立即初始化的常量或最终变量。仅仅是最终的还不够;它必须是编译时常量。

什么在起作用,什么不起作用的例子:

final int a = 1;
final int b;
b = 2;
int x = 0;
switch (x) {
  case a: // ok
  case b: // compiler error
}

在您的情况下,请使用:

final int a=10, b=20, c=30;

答案 1 :(得分:0)

在java中,Constant表示其值不应再次更改。

因此,如果您在变量之前放置 final 关键字,那么对于java而言,这些将变为常量,而编译器不会给出错误。

final  int  a =10 ,b=20 ,c=30 ; //Here i give constant value