Java中instanceof和getClass()的不同

1.两者类型不同

instanceof是Java中的操作符,类似于 ==,>。

getClass()是Object类的方法,可返回Class类型的实例,对其调用其他的方法,可以获得当前类的各种信息

//final方法不允许Override
public final Class<?> getClass();

2.对于继承关系判断的不同

class Music {
    @Override
    public String toString() {
        return "Music";
    }
}

class ACGMusic extends Music{
    @Override
    public String toString() {
        return "ACGMusic";
    }
}
public class MyTest {
    public static void test(Object o) {
        System.out.println(o.toString() + " instanceof Music: " + (o instanceof Music));
        System.out.println(o.toString() + " instanceof ACGMusic: " + (o instanceof ACGMusic));
        System.out.println(o.toString() + ".getClass() == Music.class:" + (o.getClass() == Music.class));
        System.out.println(o.toString() + ".getClass() == ACGMusic.class:" + (o.getClass() == ACGMusic.class));

    }
    public static void main(String[] args) {
        Music music = new Music();
        ACGMusic acgMusic = new ACGMusic();
        test(music);
        System.out.println();
        test(acgMusic);
    }
}

//运行结果如下
Music instanceof Music: true
Music instanceof ACGMusic: false 
Music.getClass() == Music.class:true
Music.getClass() == ACGMusic.class:false

ACGMusic instanceof Music: true //子类是父类的实例
ACGMusic instanceof ACGMusic: true
ACGMusic.getClass() == Music.class:false //子类的Class对象不是父类的Class对象
ACGMusic.getClass() == ACGMusic.class:true

总结一下:通过getClass()方法比较的是运行时实例的类型,instanceof判断是否是某个类或其派生类,如果想准确判断,用getClass()进行比较。

猜你喜欢

转载自blog.csdn.net/zjxht62/article/details/110007741