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语句必须遵循的规则:
- 一个switch语句可以有任意数量的case语句。
- 当遇到break语句时,switch终止,控制流跳出switch语句。
- 不是每个case都包含break。如果case语句不包含break语句,控制流将继续后续的case,直到遇到break为止。
- switch语句可以有一个可选的default case,出现在switch的结尾。当然也可以出现在switch语句的最开始。default case可用于以上所有的case都不为真时,执行的任务。
- 如果匹配不成功,查看是否有default子句,如果没有,直接结束switch结构,如果有default子句,执行default子句。
- 如果有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,那么就抛出空指针异常。
分类:
高级编程语言 / java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~