目录
- 一、instanceof模式匹配的概述
- 二、instanceof模式匹配代码示例
- 2.1、jdk17之前 instanceof用法 代码示例
- 2.2、jdk17及之后 instanceof用法 代码示例一
- 2.3、jdk17及之后 instanceof用法 代码示例二
一、instanceof模式匹配的概述
- instanceof增加了模式匹配功能,如果变量类型经过instanceo判断能够匹配目标类型,则对应分支中无需再做类型强转。
- 该特性由
JDK14的JEP 305: Pattern Matching for instanceof (Preview)引入;
JDK15的JEP 375: PatternMatching for instanceof (Second Preview)进行了第二轮预览; JDK16的JEP 394: Pattern Matching for instanceof中转正。
二、instanceof模式匹配代码示例
2.1、jdk17之前 instanceof用法 代码示例
-
jdk17之前 在instanceof语句判断后的分支里需要强转示例
package com.xz.jdk17.day1;/*** @Author: xz* @Date: 2024-01-30* @Description: jdk17之前instanceof 用法* 在instanceof语句判断后的分支里需要强转*/ public class Test1 {public static void main(String[] args) {String str="hello java";Object o = str;if (o instanceof Integer) {Integer i = (Integer) o;System.out.println(i.intValue());} else if (o instanceof String) {String s = (String) o;System.out.println(s);}} }
-
输出结果
2.2、jdk17及之后 instanceof用法 代码示例一
-
jdk17及之后 在instanceof语句直接定义转换类型后的变量名示例
package com.xz.jdk17.day1;/*** @Author: xz* @Date: 2024-01-30 19:30* @Description: jdk17及之后 instanceof 用法* 在instanceof语句直接定义转换类型后的变量名*/ public class Test2 {public static void main(String[] args) {String str="hello java";Object o = str;if(o instanceof Integer i){System.out.println(i.intValue());}else if(o instanceof String s){System.out.println(s);}} }
-
输出结果
2.3、jdk17及之后 instanceof用法 代码示例二
-
jdk17及之后 在instanceof语句后直接拼其他条件示例
package com.xz.jdk17.day1;/*** @Author: xz* @Date: 2024-01-30 19:32* @Description: jdk17及之后 instanceof 用法* 在instanceof语句后直接拼其他条件*/ public class Test3 {public static void main(String[] args) {String str="hello java";Object o = str;if(o instanceof Integer i && i >10){System.out.println(i.intValue());}else if(o instanceof String s && s.startsWith("h")){System.out.println(s);}} }
-
输出结果