zoukankan      html  css  js  c++  java
  • 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与你一起学习,一起进步!
  • 相关阅读:
    整理Xen理论知识
    搭建Hadoop
    Java、中Date的格式初始化以及Calendar的使用
    学习Xen
    关于mpi的理论知识以及编写程序来实现数据积分中的梯形积分法。
    题解-CF1396C Monster Invaders
    题解-CF1139D Steps to One
    qq 表情库
    题解-洛谷P6788 「EZEC-3」四月樱花
    题解-CF1401E Divide Square
  • 原文地址:https://www.cnblogs.com/zzzzw/p/4976592.html
Copyright © 2011-2022 走看看