• instanceof只能用于对象的判断,不能用于基本类型的判断,以下代码会编译不通过
'A' instanceof Character
  • instanceof特有的规则:若左操作数是null,结果就直接返回false,不再运算右操作数是什么类
null instanceof String
  • instanceof操作符的左右操作数必须有继承或实现关系,否则编译会失败,以下代码编译不通过
new Data() instanceof String
  • 注意泛型的情况
    class GenericClass<T>{
        public boolean isDataInstance(T t){
            return t instanceof Date;
        }
    }

    boolean a = new GenericClass<String>().isDataInstance("test");//false
    //T是个String类型,与Date之间没有继承或实现关系,为什么''t instanceof Date''会编译通过呢?那是因为Java的泛型是为编码服务的,在编译成字节码时,T已经是Object类型了,传递的实参是String类型,也就是说T的表面类型是Object,实际类型是String,那''t instanceof Date''这句话就等价于''Object instance ofDate''了,所以返回false就很正常了