java switch语句

switch支持的数据类型:

基本类型有:byte,short,int,char

包装类型有:Byte,Short,Integer,Character,String,enum

switch实际上只支持int类型,其他的类型是通过转换成int支持的:

  • 基本类型:byte、char、short、int
    原因:这些基本数字类型可自动向上转为int类型, 实际还是用的int。
  • 包装类型:Byte、Short、Character、Integer
    原因:java的自动拆箱机制 可看这些对象自动转为基本类型
  • String 类型
    原因:实际switch比较的string.hashCode值,它是一个int类型
  • enum类型
    原因 :实际比较的是enum的ordinal值(表示枚举值的顺序),它也是一个int类型

switch语句必须遵循的规则:

  1. 一个switch语句可以有任意数量的case语句。
  2. 当遇到break语句时,switch终止,控制流跳出switch语句。
  3. 不是每个case都包含break。如果case语句不包含break语句,控制流将继续后续的case,直到遇到break为止。
  4. switch语句可以有一个可选的default case,出现在switch的结尾。当然也可以出现在switch语句的最开始。default case可用于以上所有的case都不为真时,执行的任务。
  5. 如果匹配不成功,查看是否有default子句,如果没有,直接结束switch结构,如果有default子句,执行default子句。
  6. 如果有return,会立即返回,则后面的default语句也不会执行。

return和break的区别:

  • break只是跳出当前switch块,继续执行后面的代码。(default语句让然执行)
  • return函数就直接返回了,无论switch块之后是否有其他代码需要执行。
  • 在只有switch的函数中,return在中断效果上和break是一致的。

面试题:
1、下面代码输出什么?

int i=9;
switch (i){
    default:
        System.out.println("default");
    case 0:
        System.out.println("0");
        break;
    case 1:
        System.out.println("1");
    case 2:
        System.out.println("2");
}

解答:default,0
default默认分支,会自动匹配上,如果不break,会继续往下走,直到遇到break退出。

2、下面代码输出什么?

int i=2;
switch (i){
    case 1:
        System.out.println("this is 1");
    case 2:
        System.out.println("this is 2");
    case 3:
        System.out.println("this is 3");
    default:
        System.out.println("this is default");
}

解答:
this is 2
this is 3
this is default
因为满足case 2,所以进入了case,并输出,由于后面并未遇到break语句,所以后面的case也全部执行了。

3、下面代码输出?

switch ('a'){
    case 'a':
        System.out.println('a');
        return;
    default:
        System.out.println("this is default");
}

解答:
a
return后,default语句不会执行。

4、break和return区别

# break和return区别
switch ('a'){
    case 'a':
        System.out.println('a');
        break;
    default:
        System.out.println("this is default");
}
System.out.println("the end");
# 结果:
# a
# the end

switch ('a'){
    case 'a':
        System.out.println('a');
        return;
    default:
        System.out.println("this is default");
}
System.out.println("the end");
# 结果:
# a

return后的语句都不会执行,break只是退出当前switch块。

5、有匹配和没有匹配的,带default与不带default比较

# 没有匹配时
int x = 0;
switch(x) {
    default:
        System.out.println("default");
    case 1:
        System.out.println(1);
    case 2:
        System.out.println(2);
}
# 结果:
# default
# 1
# 2

# 有匹配时
int x = 0;
switch (x) {
    default:
        System.out.println("default");
    case 0:
        System.out.println(0);
    case 1:
        System.out.println(1);
    case 2:
        System.out.println(2);
}
# 结果
# 0
# 1
# 2

int x = 0;
switch(x) {
    case 1:
        System.out.println(1);
    default:
        System.out.println("default");
    case 2:
        System.out.println(2);
}
# 结果
# default
# 2

当有匹配的case时,会从该case进入,然后往下执行;如果没有匹配的case时,会从default进入,然后往下执行。

6、以下代码运行结果?

String x = null;
switch(x) {
    case "param":
        System.out.println("param");
        break;
    case "String":
        System.out.println("String");
        break;
    case "null":
        System.out.println("null");
        break;
    default:
        System.out.println("default");
}

当 switch 语句执行的时候,首先需要计算表达式。那么如果这个表达式的计算结果是 null,那么就抛出空指针异常。

posted @ 2022-05-18 20:44  cavan丶keke  阅读(223)  评论(0编辑  收藏  举报