超级进化吧switch case in java

news/2024/11/30 20:45:22/

switch case的进化历程🚐

    • 简介
    • 区别
      • Java 6及以下 | 整数当道
      • Java 7 | String来贺
      • Java 8 | 常量不够, 表达式来凑
      • Java 12 | ->替: yield能返回
      • Java 14 | ->凑多值,转型在心中
        • 转型
      • Java 15 | 哎呦喂,都能定义变量了
      • Java 17 | 整数不够, 长整型来凑
    • 总结

因为长情是古董,所以假货特别多

觉得太长可以直接看总结就可以了

简介

Switch case语句在Java中是一种流程控制结构,用于将一个值与一系列可能的情况进行比较,并根据匹配的情况执行相应的代码块。在不同的Java版本中,switch case标签的用法略有不同。

区别

Java 6及以下 | 整数当道

以下是一些Java版本中的区别:

  1. Java 6及以下版本:在Java 6及以下版本中,switch case标签只支持整数、枚举类型和字符类型。以下是一个使用整数类型标签的示例代码:
int num = 2;
switch (num) {case 1:System.out.println("Number is one");break;case 2:System.out.println("Number is two");break;case 3:System.out.println("Number is three");break;default:System.out.println("Number is not between 1 and 3");
}

Java 7 | String来贺

  1. Java 7版本:在Java 7版本中,switch case标签支持字符串类型。以下是一个使用字符串类型标签的示例代码:
String fruit = "apple";
switch (fruit) {case "apple":System.out.println("The fruit is an apple");break;case "banana":System.out.println("The fruit is a banana");break;case "orange":System.out.println("The fruit is an orange");break;default:System.out.println("The fruit is unknown");
}

Java 8 | 常量不够, 表达式来凑

  1. Java 8及以上版本:在Java 8及以上版本中,switch case标签支持使用表达式作为标签。以下是一个使用表达式类型标签的示例代码:
final int MONDAY = 1;
final int TUESDAY = 2;
final int WEDNESDAY = 3;
final int THURSDAY = 4;
final int FRIDAY = 5;
final int SATURDAY = 6;
final int SUNDAY = 7;
int dayOfWeek = 5;
switch (dayOfWeek) {case MONDAY:case TUESDAY:case WEDNESDAY:case THURSDAY:case FRIDAY:System.out.println("Today is a weekday");break;case SATURDAY:case SUNDAY:System.out.println("Today is a weekend day");break;default:System.out.println("Invalid day of week");
}

在这个示例中,我们使用了final变量作为标签,并且在一个case语句中匹配了多个标签。

Java 12 | ->替: yield能返回

  1. Java 12及以上版本:在Java 12及以上版本中,switch case标签引入了新的语法:使用箭头操作符(->)代替冒号(:)来连接标签和代码块。同时,还引入了新的关键字yield,用于在switch表达式中返回值。以下是一个使用箭头操作符和yield的示例代码:
String fruit = "apple";
String result = switch (fruit) {case "apple" -> {yield "The fruit is an apple";}case "banana" -> {yield "The fruit is a banana";}case "orange" -> {yield "The fruit is an orange";}default -> {yield "The fruit is unknown";}
};
System.out.println(result);

在这个示例中,我们使用了switch表达式来获取一个返回值,并在每个case语句中使用箭头操作符和yield来指定返回值。

Java 14 | ->凑多值,转型在心中

  1. Java 14及以上版本:在Java 14及以上版本中,switch case标签引入了新的语法:使用“->”箭头操作符来连接多个标签。以下是一个使用箭头操作符连接多个标签的示例代码:
int num = 2;
switch (num) {case 1, 2, 3 -> System.out.println("The number is between 1 and 3");case 4, 5, 6 -> System.out.println("The number is between 4 and 6");default -> System.out.println("The number is not between 1 and 6");
}

在这个示例中,我们使用了箭头操作符来连接多个标签,使代码更加简洁。


转型

从Java 14版本开始,switch case标签可以用于转型(casting)。这个功能被称为“Switch Expressions with Enhanced Pattern Matching”,可以让我们在使用switch case语句时,同时进行类型检查和类型转换,从而简化代码。以下是一个使用switch case标签进行转型的示例代码:

Object obj = "Hello, World!";
if (obj instanceof String str && str.length() > 0) {int result = switch (str.charAt(0)) {case 'H', 'h' -> 1;case 'W', 'w' -> 2;case '!' -> 3;default -> 0;};System.out.println("Result: " + result);
}

在这个示例中,我们首先使用instanceof运算符进行类型检查,并将变量obj转换为字符串类型。然后,在switch表达式中,我们使用了模式匹配来检查字符串的第一个字符,并将其转换为int类型的结果。在case标签中,我们可以同时使用多个模式,从而简化代码并提高可读性。

需要注意的是,在进行转型时,我们必须使用模式变量来进行类型检查和类型转换,否则会出现编译错误。另外,需要确保使用的Java版本支持“Switch Expressions with Enhanced Pattern Matching”这个功能。

另一个使用switch case标签进行转型的例子:

Object obj = 123;
String result = switch (obj) {case Integer i -> "The object is an integer with value " + i;case Long l -> "The object is a long with value " + l;case String s -> "The object is a string with value " + s;case Double d -> "The object is a double with value " + d;default -> "The object is of unknown type";
};
System.out.println(result);

在这个示例中,我们首先将一个Object类型的变量obj赋值为一个整数类型的值123。然后,我们使用switch表达式来检查变量obj的类型,并将其转换为不同的类型。在每个case标签中,我们使用模式变量来进行类型检查和类型转换,并构造一个字符串结果。如果没有匹配的标签,我们使用默认标签来返回一个未知类型的字符串结果。

Java 15 | 哎呦喂,都能定义变量了

  1. Java 15及以上版本:在Java 15及以上版本中,switch case标签引入了新的语法:使用“->”箭头操作符来将标签与代码块分开。这个新的语法使得我们可以在一个case标签中定义变量并将其作为代码块的一部分。以下是一个使用箭头操作符和新语法定义变量的示例代码:
int num = 2;
switch (num) {case 1 -> {String message = "The number is one";System.out.println(message);}case 2 -> {String message = "The number is two";System.out.println(message);}case 3 -> {String message = "The number is three";System.out.println(message);}default -> {String message = "The number is not between 1 and 3";System.out.println(message);}
}

在这个示例中,我们在每个case标签中定义了一个字符串变量message,并在代码块中使用这个变量输出消息。

Java 17 | 整数不够, 长整型来凑

  1. Java 17及以上版本:在Java 17及以上版本中,switch case标签引入了新的语法:使用“case L ->”来指定长整型标签。以下是一个使用长整型标签的示例代码:
long num = 123456789;
switch (num) {case 123456789L -> System.out.println("The number is 123456789");case 987654321L -> System.out.println("The number is 987654321");default -> System.out.println("The number is not known");
}

在这个示例中,我们使用长整型标签来匹配长整型变量num。

总之,随着Java版本的不断升级,switch case标签的用法也在不断发展。我们需要了解这些新的语法和功能,以便更好地使用这个语言结构。同时,我们也可以利用这些新的功能来编写更加简洁和易读的代码。

总结

Java中的switch case语句可以用于多个分支条件的判断,同时也可以用于类型检查和类型转换。在不同的Java版本中,switch case语句的用法也有所不同:

  1. Java 6及以下版本:在Java 6及以下版本中,switch case语句只能用于整数类型的判断,不能用于字符串类型和其他数据类型的判断。

  2. Java 7版本:在Java 7版本中,switch case语句引入了新的语法:使用字符串类型的值作为case标签。

  3. Java 12版本:在Java 12版本中,switch case语句引入了新的语法:使用“yield”关键字来返回结果。

  4. Java 14版本:在Java 14版本中,switch case语句引入了新的语法:使用“->”箭头操作符来将标签与代码块分开,并且可以使用模式变量来进行类型检查和类型转换。这个新的语法被称为“Switch Expressions with Enhanced Pattern Matching”。

  5. Java 15及以上版本:在Java 15及以上版本中,switch case标签引入了新的语法:使用“->”箭头操作符来将标签与代码块分开,并且可以在一个case标签中定义变量并将其作为代码块的一部分。

  6. Java 17及以上版本:在Java 17及以上版本中,switch case标签引入了新的语法:使用“case L ->”来指定长整型标签。

在Java中,模式变量被用于增强模式匹配的功能,在if语句和Switch Expressions with Enhanced Pattern Matching中都有应用。使用模式变量可以让我们更加方便地进行类型检查和类型转换,并且可以直接在if语句或switch case标签的作用域内使用相关的类型操作,从而简化代码,提高可读性和可维护性。

总之,Java中的switch case语句和模式变量是非常有用的语言特性,它们可以让我们更加方便地进行多个分支条件的判断和类型检查和类型转换,并且可以让我们的代码更加简洁和易读。随着Java版本的不断升级,我们需要了解这些新的语法和功能,以便更好地使用这个语言结构。


http://www.ppmy.cn/news/39068.html

相关文章

【消息队列】聊一下如何避免消息的重复消费

什么是重复消费 一条消息在传输过程中,为了保证消息的不丢失,可能会多少量的消息进行重试,这样就可能导致Broker接受到的消息出现重复,如果说下游系统没有针对业务上的处理,那么可能导致同一笔借款或者支付订单出现重…

【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】

【网口交换机:交换机KSZ9897学习-笔记-资料汇总-记录】1、概述2、 自己的学习与摸索之路第一阶段:随意在网上查找相关资料第二阶段:针对性在网上资料第三阶段:测试并且使用开发板第四阶段:针对性使用工具进行测试。2、…

操作系统-内存管理

一、总论 1.1 硬件术语 ​ 为了不让读者懵逼(主要是我自己也懵逼),所以特地整理一下在后面会用到术语。 ​ 我们电脑上有个东西叫做内存,他的大小比较小,像我的电脑就是 16 GB 的。它是由 ROM 和 RAM 组成的&#x…

(5)(5.9) 推力损失和偏航不平衡警告

文章目录 前言 1 潜在的推力损失 2 偏航不平衡 前言 如果你看到推力损失或偏航不平衡的警告,这个页面概述了一些应该做的检查和修改来解决这个问题。在大多数情况下,这些警告是由于错误的硬件选择或设置造成的。 这些警告是为了检测推进系统的硬件故…

【C语言】预处理和程序环境

目录 程序的环境 运行环境 翻译环境 编译的过程 预编译阶段 编译阶段 汇编阶段 链接阶段(不属于编译阶段) 预处理详解 预定义符号 #define #define定义标识符 #define定义宏 #define的替换规则 #和##的使用 带副作用的宏参数 宏和…

二叉树的5个性质【要点:完全二叉树的性质】

只讲不会的 普通二叉树就要讲排列顺序了!!! 预备:满二叉树:1.前提是它必须是二叉树 2.每个结点(除了终端结点外)都是2个子女。 要点1:关于普通的树的结点的计算&#xff0…

Transformer 笔记目录

一、介绍 导论:Transformer 背景介绍,Transformer 能胜任的任务介绍。相关知识:深度学习基础(神经网络,回归,分类,优化,激活函数等),具体介绍序列到序列模型…

[linux]基础IO

文章目录基础IO1. 重新谈论文件1.1 准备工作1.1.1 提出问题1.1.2 达成共识1.2 回忆C语言文件操作1.2.1 写文件辨析fprintfsnprintf1.2.2 读文件1.2.3 向文件追加1.3 文件操作的系统调用1.3.1 OS接口open的介绍(比特位标记)1.3.2 写入操作1.3.3 追加操作1.3.4 只读操作1.4 回答问…