JAVA的instanceOf什么时候用啊

 1 当你拿到一个对象的引用时(例如参数),你可能需要判断这个引用真正指向的类。所以你需要从该类继承树的最底层开始,
  使用instanceof操作符判断,第一个结果为true的类即为引用真正指向的类
2 class Person{} 3 class Student extends Person{} 4 class Postgraduate extends Student{} 5 class Animal{} 6 public class InstanceofTester { 7 public static void main(String[] args) { 8 instanceofTest(new Student()); 9 } 10 public static void instanceofTest(Person p){ 11 // 判断p的真正类型 12 if (p instanceof Postgraduate){ 13 System.out.println("p是类Postgraduate的实例"); 14 } else if(p instanceof Student){ 15 System.out.println("p是类Student的实例"); 16 } else if(p instanceof Person){ 17 System.out.println("p是类Person的实例"); 18 } else if(p instanceof Object) { 19 System.out.println("p是类Object的实例"); 20 } 21 /*if(p instanceof Animal){//此错编译错误,所以做注释 22 System.out.println("p是类Animal的实例"); 23 }*/ 24 } 25 } 26 27 这个程序的输出结果是:p是类Student的实例 28 29 Person类所在的继承树是:Object<--Person<--Student<--Postgraduate。 30 31 这个例子中还加入一个Animal类,它不是在Person类的继承树中,所以不能作为instanceof的右操作数。

 这个demo是错误的。

1.if...else if判断只要满足前面的条件就不会继续执行,即使后面为真,所以上面的输出的确只会有一个。

但是如果将判断全部改为if的话,以上面为例,就会输出:p是类Student的实例 p是类Person的实例

p是类Object的实例。因为if判断只要满足条件就会执行,不分先后。

2.我只想说作者的说法就是错误的,p 是引用, new + 构造方法才是实例,也可以叫做对象

3.instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。

它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。

http://rodney.cnblogs.com/archive/2005/08/18/instanceof.html

---- 动动手指关注我!或许下次你又能在我这里找到你需要的答案!ZZZZW与你一起学习,一起进步!
原文地址:https://www.cnblogs.com/zzzzw/p/4976592.html