switch使用时有哪些注意事项

switch语句用于多分支选择,在使用switch(expr)的时候,expr只能是一个枚举常量(内部也是由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其对应的包装类Integer,当然也包括不同的长度整型,例如short。由于byte、short和char都能够被隐式地转换为int类型,因此这些类型以及它们对应的包装类型都可以作为switch的表达式。但是,long、float、double、String类型由于不能够隐式地转换为int类型,因此它们不能被用作switch的表达式。如果一定要使用long、float或double作为switch的参数,必须将其强制转换为int型才可以。

例如,以下对switch中参数的使用就是非法的。


float a = 0.123;

switch(a) //错误!a不是整型或字符类型变量。

{

....

}

另外,与switch对应的是case语句,case语句之后可以是直接的常量数值,例如1、2,也可以是一个常量计算式,例如1+2等,还可以是final型的变量(final变量必须是编译时的常量),例如final int a = 0,但不能是变量或带有变量的表达式,例如i * 2等。当然更不能是浮点型数,例如1.1,或者1.2 / 2等。


switch(formWay)

{

case 2-1 :  //正确

...

case a-2 :  //错误

...

case 2.0 :  //错误

...

}

随着Java语言的发展,在Java7中,switch开始支持String类型了。以下是一段支持string类型的示例代码。


public class Test {

public void test(String str) {

switch(str) {

case "hehao":

System.out.println("hehao");

break;

case "xuepeng":

System.out.println("xuepeng");

break;

case "yexiangyang":

System.out.println("yexiangyang");

break;

default:

System.out.println("default");

}

}

}

从本质上来讲,switch对字符串的支持,其实是int类型值的匹配。它的实现原理如下:通过对case后面的String对象调用hashCode()方法,得到一个int类型的hash值,然后用这个hash值来唯一标识着这个case。那么当匹配的时候,首先调用这个字符串hashCode()函数,获取一个hash值(int类型),用这个hash值来匹配所有的case,如果没有匹配成功,说明不存在;如果匹配成功了,接着会调用字符串的String.equals()方法进行匹配(至于为啥需要调用equals方法可以调用equals方法,请参照5.5.2节内容)。由此可以看出,String变量不能为null,同时,switch的case子句中使用的字符串也不能为null。

在使用switch的时候需要注意的另外一个问题是:一般必须在case语句结尾添加break语句。因为一旦通过switch语句确定了入口点,就会顺序执行后面的代码,直到遇到关键字break。否则,会执行满足这个case之后的其它case的语句而不管case是否匹配,直到switch结束或者遇到break为止。如果在switch中省略了break语句,那么匹配的case值后的所有情况(包括default情况)都会被执行。如下例所示。


public class Test {

public static void main(String[] args) {

int x = 4;

switch (x) {

case 1: System.out.println(x) ;

case 2: System.out.println(x);

case 3: System.out.println(x);

case 4: System.out.println(x);

case 5: System.out.println(x);

default: System.out.println(x);

}

}

}

程序运行结果为:

4

4

4

出自新书《Java程序员面试笔试宝典》官网

switch使用时有哪些注意事项,布布扣,bubuko.com

时间: 2024-12-17 15:23:43

switch使用时有哪些注意事项的相关文章

Java学习:switch语句使用的注意事项

switch语句使用的注意事项: 多个case后面的数值不可以重复. switch后面的小括当中只能是下列数据类型: 基本数据类型:byte/short/char/int 引用数据类型:String字符串.enum枚举. switch语句格式可以很灵活:前后顺序可以颠倒,而且break语句还可以省略. “匹配到哪一个case就从哪一个位置向下执行,直到遇到了break或者整体结束为止.” public class CaiNiao{ public static void mian(String[]

《Java程序员面试笔试宝典》终于在万众期待中出版啦~

<Java程序员面试笔试宝典>终于在万众期待中出版啦~它是知名畅销书<程序员面试笔试宝典>的姊妹篇,而定价只要48元哦,恰逢求职季节,希望本书的出版能够让更多的求职者能够走进理想的企业 在这里,众多知名企业面试官将为你撕开神秘的求职面纱: 在这里,各种求职达人将现身说法为你揭开求职谜团: 在这里,各种类型的企业招聘细节都会被展露无疑: 在这里,我们将为你抽丝剥茧,还原IT行业的真相: 在这里,我们将为你指点迷津,告诉你职场上的风风雨雨: 在这里,我们将为你点石成金,成为那盏指引你前

【Swift】学习笔记(五)——控制语句(if,switch,for-in,for,while,do-while)

在代码业务中,条件判断是必不可少的,控制流程的语句在每种语言中都是差不多的.swift包括了: if,switch,for-in,for,while,do-while if 条件语句 (if else)    (if... else if ...  else) 判断条件为true时执行相关代码.例如: var a = 0 if a > 0 { println("a > 0") }else if a == 0{ println("a = 0") }else

绘制思维导图的注意事项有哪些?

思维导图的绘制时围绕中心主图进行展开的,并且在绘制的过程中要注意上下级节点的位置从而进行搭建,思维导图的优势有很多,他可以培养我们的思维能力,逻辑能力以及创造能力,这些都是在绘制过程中培养出来的,拿在绘制思维导图时有什么注意事项呢? 思维导图是什么? 思维导图又叫心智导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来,把主题关键词与图像.颜色等建立记忆链接. 绘制思维导图工具:迅捷画图

Golang-程序流程控制 if、switch

程序流程控制介绍 在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句. 1)顺序控制 2)分支控制 3)循环控制 顺序控制 程序从上到下逐行地执行,中间没有任何判断和跳转. 一个案例说明,必须下面的代码中,没有判断,也没有跳转.因此程序按照默认的流程执行,即顺序控制. 顺序控制的一个流程图        顺序控制举例和注意事项 Golang 中定义变量时采用合法的前向引用.如: func main() { var num1 int = 10 //声明了 n

Code Complete阅读笔记(二)

2015-03-06   328   Unusual Data Types    ——You can carry this technique to extremes,putting all the variables in your program into one big,juicy variable and then passingit everywhere.Careful programmers avoid bundling data any more than is logically

小猪的Android入门之路 Day 9 part 2

小猪的Android入门之路 Day 9 part 2 Android四大组件之--AIDL实现跨进程通信 --转账请注明出处:coder-pig 本节引言: 在上一part中我们对Service进行了简单的学习: 什么是Service,Service的生命周期,StartService和BindService的区别以及使用 IntentService来解决Service的异步问题; 而在今天的这一Part中将会研究另一个东西:IPC,安卓给我们提供了AIDL Service 来完成进程间的数据

基本控制语句

1 顺序结构 (最常见的) 特点:代码从上往下依次执行 2 选择结构 : if 判断语句 : switch 判断语句: Switch语句使用的注意事项: 1.每一个语句结束后需要有一个break,防止switch的穿透. 2.switch语句中用于判断的额变量只能是int ,short,char,byte String(jdk7之后才有) 3.Case后面跟的数据必须是常量. switch语句的优点 :语句结构清晰,运行速率快. switch语句的缺点: If能过做的switch不一定能做,sw

java学习第二天 回顾运算符

一.回顾运算符: 补充: 三元运算符. 代码: /* 三目运算符: 三元运算符: 结构: 条件?条件成立的结果 :条件不成立的结果 ; */ class Demo1 { public static void main(String[] args) { int a = 10; int b = 9; int c =  b++>=a ? a++ : b+a; System.out.println(a);  //10 System.out.println(b);  //10 System.out.pri