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