instanceof关键词

最近在看学RTTI是看到了instanceof关键词,发现这个关键词的使用会爆出很多的异常,于是就想着整理一下这些的异常。

class Father{}

class Son extends Father{}


class Wang{}

public class Test {
    public static void main(String[] args) {
        Father father1=new Father();
        Father father2=new Son();
        Son son=new Son();
        Wang wang=new Wang();
        Integer i=0;
        int j=0;
        Integer k=null;
        System.out.println( father1 instanceof Son);
        System.out.println(father2 instanceof Son);
        System.out.println(son instanceof  Son);
        System.out.println(son instanceof Father);
        System.out.println(i instanceof Integer);
        System.out.println(k instanceof Integer);
        System.out.println(son instanceof List<?>);
        //编译报错
        /*System.out.println(j instanceof Integer);
        System.out.println(son instanceof Wang);*/
    }
}

简单来说,instanceof的意思就是判断左边的对象是否能强制转换成右边类。所以当右边的类为左边的引用对象的本上或是其父类时返回一个true,其余则会返回一个false。
如果编译器可以直接判断左边的对象和右边的引用类没有关系,那么会直接给你报一个编译错误,就像上面例子中的son和wang一样。但是当无法确定时则不会报错,但是会返回一个false。
同样左边只能为引用类型,若是为基本数据类型,也同样会报错。
当我们左边的引用对象为空时,无论如何我们都会返回一个null。
但是荣国我们右边的类型为null时,则会直接报错。

你可能感兴趣的:(java学习,java,开发语言)