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与你一起学习,一起进步!
  • 相关阅读:
    $router和$route的区别
    提莫攻击
    paste命令
    数组中的第K个最大元素
    od命令
    被围绕的区域
    不用虚机不用Docker使用Azure应用服务部署ASP.NET Core程序
    面试官:对象可能会迟到,但它永远不会缺席
    Kubernetes 的层级命名空间介绍
    每日一道 LeetCode (21):对称二叉树
  • 原文地址:https://www.cnblogs.com/zzzzw/p/4976592.html
Copyright © 2011-2022 走看看