package dfa; public class InstanceofFromObjectToPrimitive { public static void main(String[] args) { testSimple(0); testObjectNull(); testObjectBoolean(); testNumberInt(); testObjectInt(); testObjectDouble(); testObjectBooleanPattern(); testNumberIntPattern(); testObjectIntPattern(); testObjectNullPattern(); testObjectDoublePattern(); testObjectRecord(); testNumberRecord(); testIntegerRecord(); testIntegerRecordNotNull(); testLongRecord(); testLongRecordNotNull(); } private static void testObjectRecord() { ObjectRecord o = new ObjectRecord(1); if (o instanceof ObjectRecord(int a)) { System.out.println("int"); } if (o instanceof ObjectRecord(byte a)) { System.out.println("byte"); } if (o instanceof ObjectRecord(short a)) { System.out.println("short"); } if (o instanceof ObjectRecord(long a)) { System.out.println("long"); } if (o instanceof ObjectRecord(float a)) { System.out.println("float"); } if (o instanceof ObjectRecord(double a)) { System.out.println("double"); } } private static void testNumberRecord() { NumberRecord o = new NumberRecord(1); if (o instanceof NumberRecord(int a)) { System.out.println("int"); } if (o instanceof NumberRecord(byte a)) { System.out.println("byte"); } if (o instanceof NumberRecord(short a)) { System.out.println("short"); } if (o instanceof NumberRecord(long a)) { System.out.println("long"); } if (o instanceof NumberRecord(float a)) { System.out.println("float"); } if (o instanceof NumberRecord(double a)) { System.out.println("double"); } } private static void testIntegerRecord() { IntegerRecord o = new IntegerRecord(1); if (o instanceof IntegerRecord(int a)) { System.out.println("int"); } if (o instanceof IntegerRecord(long a)) { System.out.println("long"); } if (o instanceof IntegerRecord(float a)) { System.out.println("float"); } if (o instanceof IntegerRecord(double a)) { System.out.println("double"); } } private static void testLongRecord() { LongRecord o = new LongRecord(1L); if (o instanceof LongRecord(long a)) { System.out.println("long"); } if (o instanceof LongRecord(float a)) { System.out.println("float"); } if (o instanceof LongRecord(double a)) { System.out.println("double"); } } private static void testLongRecordNotNull() { LongRecord o = new LongRecord(1L); if (o.o() == null) { return; } if (o instanceof LongRecord(long a)) { //true System.out.println("long"); } if (o instanceof LongRecord(float a)) { System.out.println("float"); } if (o instanceof LongRecord(double a)) { System.out.println("double"); } } private static void testDirectFieldAccess() { LongRecord o = new LongRecord(1L); if (o.o == null) { return; } if (o instanceof LongRecord(long a)) { //true System.out.println("long"); } } private static void testIntegerRecordNotNull() { IntegerRecord o = new IntegerRecord(1); if (o.o() == null) { return; } if (o instanceof IntegerRecord(int a)) { //true System.out.println("int"); } if (o instanceof IntegerRecord(long a)) { //true System.out.println("long"); } if (o instanceof IntegerRecord(float a)) { System.out.println("float"); } if (o instanceof IntegerRecord(double a)) {//true System.out.println("double"); } } record ObjectRecord(Object o) { } record NumberRecord(Number o) { } record IntegerRecord(Integer o) { } record LongRecord(Long o) { } private static void testSimple(Object i) { if (i instanceof int) { System.out.println(i); } } public static void testObjectNull() { Object o = null; if (o instanceof int) { //false System.out.println("int"); } if (o instanceof char) { //false System.out.println("char"); } if (o instanceof byte) { //false System.out.println("byte"); } if (o instanceof short) { //false System.out.println("short"); } if (o instanceof long) { //false System.out.println("long"); } if (o instanceof float) { //false System.out.println("float"); } if (o instanceof double) { //false System.out.println("double"); } if (o instanceof boolean) { //false System.out.println("boolean"); } } public static void testObjectInt() { Object o = 1; if (o instanceof int) { //true System.out.println("int"); } if (o instanceof char) { //false System.out.println("char"); } if (o instanceof byte) { //false System.out.println("byte"); } if (o instanceof short) { //false System.out.println("short"); } if (o instanceof long) { //false System.out.println("long"); } if (o instanceof float) { //false System.out.println("float"); } if (o instanceof double) { //false System.out.println("double"); } if (o instanceof boolean) { //false System.out.println("boolean"); } } public static void testNumberInt() { Number o = 1; if (o instanceof int) { //true System.out.println("int"); } if (o instanceof byte) { //false System.out.println("byte"); } if (o instanceof short) { //false System.out.println("short"); } if (o instanceof long) { //false System.out.println("long"); } if (o instanceof float) { //false System.out.println("float"); } if (o instanceof double) { //false System.out.println("double"); } } public static void testObjectBoolean() { Object o = true; if (o instanceof int) { //false System.out.println("int"); } if (o instanceof char) { //false System.out.println("char"); } if (o instanceof byte) { //false System.out.println("byte"); } if (o instanceof short) { //false System.out.println("short"); } if (o instanceof long) { //false System.out.println("long"); } if (o instanceof float) { //false System.out.println("float"); } if (o instanceof double) { //false System.out.println("double"); } if (o instanceof boolean) { //true System.out.println("boolean"); } } public static void testObjectDouble() { Object o = 1.0; if (o instanceof int) { //false System.out.println("int"); } if (o instanceof char) { //false System.out.println("char"); } if (o instanceof byte) { //false System.out.println("byte"); } if (o instanceof short) { //false System.out.println("short"); } if (o instanceof long) { //false System.out.println("long"); } if (o instanceof float) { //false System.out.println("float"); } if (o instanceof double) { //true System.out.println("double"); } if (o instanceof boolean) { //false System.out.println("boolean"); } } public static void testObjectIntPattern() { Object o = 1; if (o instanceof int t) { //true System.out.println("int" + t); } if (o instanceof char t) { //false System.out.println("char" + t); } if (o instanceof byte t) { //false System.out.println("byte" + t); } if (o instanceof short t) { //false System.out.println("short" + t); } if (o instanceof long t) { //false System.out.println("long" + t); } if (o instanceof float t) { //false System.out.println("float" + t); } if (o instanceof double t) { //false System.out.println("double" + t); } if (o instanceof boolean t) { //false System.out.println("boolean" + t); } } public static void testObjectNullPattern() { Object o = null; if (o instanceof int t) { //false System.out.println("int" + t); } if (o instanceof char t) { //false System.out.println("char" + t); } if (o instanceof byte t) { //false System.out.println("byte" + t); } if (o instanceof short t) { //false System.out.println("short" + t); } if (o instanceof long t) { //false System.out.println("long" + t); } if (o instanceof float t) { //false System.out.println("float" + t); } if (o instanceof double t) { //false System.out.println("double" + t); } if (o instanceof boolean t) { //false System.out.println("boolean" + t); } } public static void testNumberIntPattern() { Number o = 1; if (o instanceof int t) { //true System.out.println("int" + t); } if (o instanceof byte t) { //false System.out.println("byte" + t); } if (o instanceof short t) { //false System.out.println("short" + t); } if (o instanceof long t) { //false System.out.println("long" + t); } if (o instanceof float t) { //false System.out.println("float" + t); } if (o instanceof double t) { //false System.out.println("double" + t); } } public static void testObjectBooleanPattern() { Object o = true; if (o instanceof int t) { //false System.out.println("int" + t); } if (o instanceof char t) { //false System.out.println("char" + t); } if (o instanceof byte t) { //false System.out.println("byte" + t); } if (o instanceof short t) { //false System.out.println("short" + t); } if (o instanceof long t) { //false System.out.println("long" + t); } if (o instanceof float t) { //false System.out.println("float" + t); } if (o instanceof double t) { //false System.out.println("double" + t); } if (o instanceof boolean t) { //true System.out.println("boolean" + t); } } public static void testObjectDoublePattern() { Object o = 1.0; if (o instanceof int t) { //false System.out.println("int" + t); } if (o instanceof char t) { //false System.out.println("char" + t); } if (o instanceof byte t) { //false System.out.println("byte" + t); } if (o instanceof short t) { //false System.out.println("short" + t); } if (o instanceof long t) { //false System.out.println("long" + t); } if (o instanceof float t) { //false System.out.println("float" + t); } if (o instanceof double t) { //true System.out.println("double" + t); } if (o instanceof boolean t) { //false System.out.println("boolean" + t); } } }