switch case 语句有如下规则:

switch 语句中的变量类型可以是: byte、short、int 或者 char。从 Java SE 7 开 始,switch 支持字符串 String 类型了,同时 case 标签必须为字符串常量或字面 量。

switch 语句可以拥有多个 case 语句。每个 case 后面跟一个要比较的值和冒号。

case 语句中的值的数据类型必须与变量的数据类型相同,而且只能是常量或者字 面常量。

当变量的值与 case 语句的值相等时,那么 case 语句之后的语句开始执行,直到 break 语句出现才会跳出 switch 语句。

当遇到 break 语句时,switch 语句终止。程序跳转到 switch 语句后面的语句执行。case 语句不必须要包含 break 语句。如果没有 break 语句出现,程序会继续执行下一条 case 语句,直到出现 break 语句。

switch 语句可以包含一个 default 分支,该分支一般是 switch 语句的最后一个分 支(可以在任何位置,但一般在最后一个)。default 在没有 case 语句的值和变 量值相等的时候执行。default 分支不需要 break 语句。(如果case语句中没有break 语句,程序会一直执行到default 分支)

一、switch 介绍

switch 语法格式:

 switch (表达式) {
        case 常量表达式或枚举常量:
            语句;
            break;
        case 常量表达式或枚举常量:
            语句;
            break;
        ......
        default: 语句;
            break;
    }
复制代码

switch 匹配的表达式可以是:

  • byte、short、char、int类型及 这4种类型的包装类型;
  • 枚举类型;
  • String 类型;

case 匹配的表达式可以是:

  • 常量表达式;
  • 枚举常量;

注意一点: case提供了switch表达式的入口地址,一旦switch表达式与某个case分支匹配,则从该分支的语句开始执行,一直执行下去,即其后的所有case分支的语句也会被执行,直到遇到break语句。

public static void main(String[] args) {
        String  s = "a";
        
        switch (s) {
        case "a": //a分支
             System.out.println("匹配成功1");
                
        case "b": //b分支
                System.out.println("匹配成功2");
                
        case "c": //c分支
                 System.out.println("匹配成功3");
                 break;
        case "d": //d分支
                 System.out.println("匹配成功4");
                 break;
        default:
            break;
        }
    }

运行结果:

匹配成功1 匹配成功2 匹配成功3

switch成功匹配了a分支,但a、b分支都没有 break 语句,所以一直执行a分支后的所有语句,直到遇到c分支的break语句才终止。

他与下方的结果是不一样的:

package test;

public class SwitchTest {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String a = "c";
		switch (a) {
		case "a":
			System.out.println("匹配成功a");
			//break;
		case "b":
			System.out.println("匹配成功b");
			//break;
		case "c":
			System.out.println("匹配成功c");
			break;
		default:
			System.out.println("hhhh");
			break;
		}

	}

}

在最后一个case中才判断正确,则前面case中的内容都不会被输出 

 

 

Java中switch和if语句的区别

switch和if语句都是Java的选择语句,这两种语句都是允许在程序运行时控制程序的执行过程。

switch和if-else相比,由于使用了Binary Tree算法,绝大部分情况下switch会快一点,除非是if-else的第一个条件就为true。 

编译器编译switch与编译if…else…不同。不管有多少case,都直接跳转,不需逐个比较查询。 
 
相比于if-else结构,switch的效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。
  
switch效率高,从汇编代码可以看出来。switch只计算一次值,然后都是test。
  
switch的效率与分支数无关。当只有分支比较少的时候,if效率比switch高(因为switch有跳转表)。分支比较多,那当然是使用switch。

 

11、switch 是否能作用在byte 上,是否能作用在long 上,是否能作用在String上?
答:在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,Java中引入了枚举类型,expr也可以是enum类型,从Java 7开始,expr还可以是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐