选择结构(二)Switch多选择结构

选择结构(二)Switch多选择结构

1.语法

 switch(expression){
     case value:
         //语句;
         break;//可不写
     case value:
         //语句;
         break;//可不写
     case value:
         //语句;
         break;//可不写
     case value:
         //语句;
         break;//可不写
     default://可不写
         //语句;
 }

switch语句中的变量可以是byte,short,int或char,现在也支持字符串类型了(从JavaSE7开始)

switch不能加范围如<100,只能加特定值或表达式如100/20

  1. 例题

     public class SwitchDemo01 {
         public static void main(String[] args) {
             char grade='B';
             switch (grade){
                 case 'A':
                     System.out.println("优秀");
                     break;
                 case 'B':
                     System.out.println("良好");
                 case 'C':
                     System.out.println("及格");
                 case 'D':
                     System.out.println("再接再厉");
                 default:
                     System.out.println("未知等级");
            }
        }
     }
  1. case穿透现象

如上例题,当grade为B时,会输出良好,但因为没有break,不会停止,会继续向下运行输出直到遇到break或运行完。 例题中输出结果为良好,及格,再接再厉,未知等级。

  1. 变量为字符串测试

     public class SwitchDemo02 {
         public static void main(String[] args) {
             String name="苹果";
             switch (name){
                 case "李子":
                     System.out.println("11");
                     break;
                 case "苹果":
                     System.out.println("22");
                     break;
                 case "葡萄":
                     System.out.println("33");
                     break;
                 case "红枣":
                     System.out.println(44);
                     break;
            }
        }
     }

写的.java文件需转化为.class文件(字节码文件)来运行。而将.class转为.java为反编译操作

具体操作:点击菜单栏里的project structure,查看project的输出目录,打开该目录--->复制相应的.class文件-->找到相应.java文件所在的文件夹,并将.class文件复制进去。在idea中就可以打开相应的.class文件了且是反编译过后的,如下。反编译之前的.class打开为一片乱码。

 //
 // Source code recreated from a .class file by IntelliJ IDEA
 // (powered by FernFlower decompiler)
 //
 
 package com.fj.Structure;
 
 public class SwitchDemo02 {
     public SwitchDemo02() {
    }
 
     public static void main(String[] args) {
         String name = "苹果";
         byte var3 = -1;
         switch(name.hashCode()) {
         case 843202:
             if (name.equals("李子")) {
                 var3 = 0;
            }
             break;
         case 1031489:
             if (name.equals("红枣")) {
                 var3 = 3;
            }
             break;
         case 1065923:
             if (name.equals("苹果")) {
                 var3 = 1;
            }
             break;
         case 1084355:
             if (name.equals("葡萄")) {
                 var3 = 2;
            }
        }
 
         switch(var3) {
         case 0:
             System.out.println("11");
             break;
         case 1:
             System.out.println("22");
             break;
         case 2:
             System.out.println("33");
             break;
         case 3:
             System.out.println(44);
        }
 
    }
 }

可以看到switch是通过hashcode来比对字符串是否相等的,每一个对象都有一个hashcode,在对哈希值进行比对。所以字符串本质上还是数字。

posted @ 2022-12-05 20:31  武义一中梁朝伟  阅读(191)  评论(0)    收藏  举报