一、前言
1.1、instanceof 1.2、 1.3、
二、instanceof 的说明、解释
2.1、
说明:
2.2、
double obj = 1; if (obj instanceof Double) System.out.println("true"); //无输出-->不成立
String obj = 1.0 + ""; if (obj instanceof Double) System.out.println("true"); //无输出:
if(null instanceof Object) System.out.println("true"); else System.out.println("false"); //输出:false String obj = null; if (obj instanceof Object){ System.out.println("true"); else System.out.println("false"); //输出:false
String obj = null; if (obj instanceof null) System.out.println("true"); else System.out.println("false");
2.2.5_demo05_ :前方高能,务必仔细阅读!!!
class Student {} public class Test { public static void main(String[] args){ //第1组 System.out.println(new Student() instanceof String); //编译时错误 System.out.println(new Student() instanceof Exception); //编译时错误 System.out.println(new Student() instanceof Object); //输出时true //第2组 System.out.println(new Student() instanceof List); //输出false System.out.println(new Student() instanceof List<?>); //输出false System.out.println(new Student() instanceof List<String>); //编译错误 System.out.println(new Student() instanceof List<Object>); //编译错误 //第3组 System.out.println(new String() instanceof List); //编译错误 System.out.println(new String() instanceof List<?>); //编译错误 //第4组 System.out.println(null instanceof Object); //输出错误,同demo03 } }
分析:
疑惑 1 :为什么用student()测试String时编译报错,测试List的时编译通过
疑惑 2 :Student已经确定类型了啊,List类型也是确定的啊,为什么能够编译通过呢,而String却不行呢?``
String、Integer、Long
等都是 最终类
,他们的处理类似于编译器对常量的处理,故而可以通过编译 final
关键字的时候,其表现就跟 String、Integer、Long
这些最终类测试instanceof表现的一样了。 三、instanceof 的用法
result = object instanceof class
参数:
result object class
四、综述