zoukankan      html  css  js  c++  java
  • Java基础系列--instanceof关键字

    原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/8492158.html

      instanceof关键字是在Java类中实现equals方法最常使用的关键字,表示其左边的对象是否是右边类型的实例,这里右边的类型可以扩展到继承、实现结构中,可以是其真实类型,或者真实类型的超类型、超接口类型等。

      instanceof左边必须是对象实例或者null类型,否则无法通过编译。

      instanceof右边必须是左边对象的可转换类型(可强转),否则无法通过编译。

      使用实例:

     1     interface IFather1{}
     2     interface ISon1 extends IFather1{}
     3     class Father1 implements IFather1{}
     4     class Son1 extends Father1 implements ISon1{}
     5     public class InstanceofTest {
     6         public static void main(String[] args){
     7             Father1 father1 = new Father1();
     8             Son1 son1 = new Son1();
     9             System.out.println(son1 instanceof IFather1);//1-超接口
    10             System.out.println(son1 instanceof Father1);//2-超类
    11             System.out.println(son1 instanceof ISon1);//3-当前类
    12             System.out.println(father1 instanceof IFather1);//4-超接口
    13             System.out.println(father1 instanceof ISon1);//false
    14         }
    15     }

      执行结果为:

    true
    true
    true
    true
    false
    View Code

      如上实例所示:除了最后一个,前四个全部为true,查看类的继承关系如下:

      

      可以明显看到,Son1类是最终的类,其对象son1可以instanceof上面所有的接口和类(IFather1、ISon1、Father1、Son1),而Father1的实例father1上级只有IFather1接口和本类Father1能instanceof,其余均无法成功。

      这样我们就能理解instanceof的用途了,最后说说其在equals中的作用,我们来看个简单的equals实现(来自java.lang.String类):

     1     public boolean equals(Object anObject) {
     2         if (this == anObject) {
     3             return true;
     4         }
     5         if (anObject instanceof String) {
     6             String anotherString = (String) anObject;
     7             int n = value.length;
     8             if (n == anotherString.value.length) {
     9                 char v1[] = value;
    10                 char v2[] = anotherString.value;
    11                 int i = 0;
    12                 while (n-- != 0) {
    13                     if (v1[i] != v2[i])
    14                             return false;
    15                     i++;
    16                 }
    17                 return true;
    18             }
    19         }
    20         return false;
    21     }

      明显在第5行使用到了instanceof关键字,其目的就是为了判断给定的参数对象是否是String类的实例。区别于getClass()方法,后者得到的是当前对象的实际类型,不带继承关系。

    1         System.out.println(son1.getClass());
    2         System.out.println(father1.getClass());

      结果为:

    class Son1
    class Father1
    View Code

    参考:Java关键字——instanceof

      

  • 相关阅读:
    python bilibili(一)获取直播间标题
    反射机制
    如何修改excel转换csv的分隔符
    Timer和TimerTask详解——(转)
    Android完全退出应用程序(一)
    动态设置ImageView中的图片
    excel导入sqlite (命令方式)
    Android开发中完全退出程序的三种方法
    Android实现回退
    如何把批量数据导入到android 的 sqlite 数据库(转)
  • 原文地址:https://www.cnblogs.com/V1haoge/p/8492158.html
Copyright © 2011-2022 走看看