JDK18 新特性详解,2022-03-22 正式发布

文章讨论了Java中默认字符集UTF-8的影响,指出依赖默认字符集可能导致跨平台问题。同时,介绍了JDK中switch语句的模式匹配增强,特别是JDK16的instanceof模式匹配在switch中的应用,提供了更安全和简洁的代码编写方式。
摘要由CSDN通过智能技术生成

预览版:该功能在当前版本可以使用,如果效果不是很好的话,可能以后的其他版本就会删去该功能。

最终版:该功能在之前版本效果很好,之后的每个版本中都会存在该功能。

1、默认字符集为 UTF-8

如果未传递 charset 参数,则标准 Java API 通常使用默认 charset。JDK 在启动时根据运行时环境选择默认字符集:操作系统、用户的区域设置和其他因素。

由于默认字符集在所有地方都不相同,因此使用默认字符集的 API 会带来许多不明显的危险,即使对于有经验的开发人员也是如此。

例,其中 UTF-8 在 macOS 上编码的日语文本文件在以美国英语或日语语言环境在 Windows 上读取时被损坏:

java.io.FileReader(“hello.txt”) -> “こんにちは” (macOS) java.io.FileReader(“hello.txt”) -> “ã?“ã‚“ã?«ã?¡ã? ” (Windows (en-US)) java.io.FileReader(“hello.txt”) -> “縺ォ縺。縺ッ” (Windows (ja-JP)

2、switch 新增模式(第二预览版)

使用 switch 表达式和语句的模式匹配以及对模式语言的扩展来增强 Java 编程语言。将模式匹配扩展到 switch 允许针对多个模式测试表达式,每个模式都有特定的操作,以便可以简洁安全地表达复杂的面向数据的查询。基于 JDK16 instanceof 模式匹配(最终版)优化升级 switch 使用方法,先回忆下JDK16 模式匹配(最终版)

if (obj instanceof String s) {

switch 可直接用 instanceof 模式匹配选择(需要提前考虑 null 判断)

Object o; switch (o) {
case null -> System.out.println(“首先判断对象是否为空,走空指针逻辑等后续逻辑”);
case String s -> System.out.println(“判断是否为字符串,s:” + s);
case record p -> System.out.println("判断是否为Record类型: " + p.toString());
case int[] arr -> System.out.println(“判断是否为数组,展示int数组的长度” + ia.length);
case Integer i -> System.out.println(“判断是否为Intger对象,i:” + i);
case Student s -> System.out.println(“判断是否为具体学生对象,student:” + s.toString());
case UserCommonService -> System.out.println(“判断是否为普通用户实现类,然后走普通用户逻辑”);
case UserVipService -> System.out.println(“判断是否为vip用户实现类,然后走vip用户逻辑”);
default -> System.out.println(“Something else”); }

其他的都是无关紧要点

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值