JDK8 → JDK21 升级对照表(纯代码版)
全覆盖语法、变量、字符串、集合、Stream、面向对象、并发、Switch、类型判断、IO、日期。1. 局部变量声明var 类型推断JDK8String name Java;ListString list new ArrayList();int num 10;JDK21var name Java;var list new ArrayList();var num 10;2. 字符串处理核心高频JDK8String str test ;// 去空格String trim str.trim();// 空白判断boolean isEmpty str.trim().isEmpty();// 重复字符串 需循环String rep ;for(int i0;i3;i) rep Hi;JDK21var str test ;var trim str.strip(); // 全角空格也处理var blank str.isBlank(); // 直接判断空白var rep Hi.repeat(3); // 一键重复3. 集合创建与不可变集合JDK8ListString list new ArrayList();list.add(a);list.add(b);// 不可变集合ListString unmod Collections.unmodifiableList(list);JDK21var list List.of(a, b); // 直接创建不可变集合4. 集合遍历for-each LambdaJDK8ListInteger nums Arrays.asList(1,2,3);for(Integer n : nums){System.out.println(n);}nums.forEach(n - System.out.println(n));JDK21var nums Arrays.asList(1,2,3);for(var n : nums){System.out.println(n);}nums.forEach((var n) - System.out.println(n));5. Stream 流处理JDK8ListInteger list Arrays.asList(1,2,3,4);ListInteger even list.stream().filter(x - x%20).collect(Collectors.toList());JDK21var list Arrays.asList(1,2,3,4);var even list.stream().filter((var x) - x%20).toList(); // 简化无需Collectors6. instanceof 类型判断语法糖JDK8Object obj hello;if(obj instanceof String){String s (String)obj;System.out.println(s);}JDK21var obj hello;if(obj instanceof String s){System.out.println(s); // 自动强转}7. Switch 语句升级表达式JDK8String type;int num 2;switch(num){case 1: type A; break;case 2: type B; break;default: type C;}JDK21var num 2;var type switch(num){case 1 - A;case 2 - B;default - C;};8. 数据实体类Record 新特性JDK8public class User {private Long id;private String name;// 构造、get、set、toString 全手写}JDK21// 一行搞定自带构造、get、equals、toStringpublic record User(Long id, String name){}9. 接口私有方法JDK8interface Inter{default void f(){}static void g(){}// 无私有方法}JDK21interface Inter{default void f(){}static void g(){}private void inner(){} // 接口私有方法}10. 日期时间JDK8LocalDate now LocalDate.now();DateTimeFormatter fmt DateTimeFormatter.ofPattern(yyyy-MM-dd);JDK21var now LocalDate.now();var fmt DateTimeFormatter.ofPattern(yyyy-MM-dd);// 新增更多工具方法、时区优化11. 多线程颠覆性虚拟线程JDK8Thread t new Thread(() - {System.out.println(线程);});t.start();JDK21// 轻量级虚拟线程高并发神器Thread vt Thread.startVirtualThread(() - {System.out.println(虚拟线程);});12. 多异常捕获JDK8try{// 代码}catch(IOException e){//}catch(NullPointerException e){//}JDK21try{// 代码}catch(IOException | NullPointerException e){// 合并捕获JDK8已有21优化语法}13. 集合遍历 MapJDK8MapString,Integer map new HashMap();for(Map.EntryString,Integer entry : map.entrySet()){//}JDK21var map new HashMap();for(var entry : map.entrySet()){// 省略复杂泛型}JDK8传统语法、无 var、无 Record、无虚拟线程、Stream 简陋JDK21✅var 简化变量✅ 字符串全套增强✅ Stream.toList() 简化✅instanceof 模式匹配✅ Switch 表达式✅ Record 数据类✅ 虚拟线程大杀器✅ 接口私有方法