Java中switch的高级用法


switch语句的用法

用法一:

public class Main {
    public static void main(String[] args) {
        String fruit = "apple";
        switch (fruit) {
        case "apple":
            System.out.println("Selected apple");
            break;
        case "pear":
            System.out.println("Selected pear");
            break;
        case "mango":
            System.out.println("Selected mango");
            break;
        default:
            System.out.println("No fruit selected");
            break;
        }
    }
}

注意点:要记得写break(case语句具有穿透效应,如果不写的话,后面的会继续执行);要记得写default(都不匹配的情况);

简洁的用法:

public class Main{
    public static void main(String[] args){
        String fruit="ban";
        switch (fruit){
            case "apple"->System.out.println("select a");
            case "banana"->System.out.println("select b");
            case "mango"->System.out.println("select mango");
            default ->System.out.println("select none");
        }
        // System.out.println("哈哈哈");
    }
}

直接使用箭头来表示switch的返回值,没有了写很多break的繁琐

这种简介的写法还可以直接返回值:

public class Main {
    public static void main(String[] args) {
        String fruit = "a";
        int option = switch (fruit) {
            case "a" -> 1;
            case "p", "m" -> 2;
            default -> 0;
        }; // 注意使用赋值语句要以;结束
        System.out.println("opt = " + option);
    }
}

使用yield来返回值:

public class Main {
    public static void main(String[] args) {
        String fruit = "orange";
        int opt = switch (fruit) {
            case "apple" -> 1;
            case "pear", "mango" -> 2;
            default -> {
                int code = fruit.hashCode();
                yield code;
            }
        };
        String c="a";
        System.out.println(c.hashCode());
        System.out.println("opt = " + opt);
    }
}

说明:其中使用了String的hashcode方法,这个方法是以31为权,每一位为字符的ASCII值进行运算,用自然溢出来等效取模,得到一个不容易重复的数字,hashcode源码如下:

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

然后还使用了yield来返回值,注意只有switch使用->的简洁写法才可以使用yield返回值。

参考资料:

Java编程:String 类中 hashCode() 方法详解_志波同学的博客-CSDN博客_string.hashcode()


文章作者: AllenMirac
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 AllenMirac !
  目录