instanceof操作符

    在进行强制类型转换的时候为了防止出现ClassCastException,需要进行判断,可以使用instanceof操作符。下面分别介绍instanceof操作符的基本用法、使用的场合以及注意事项。

1、基本用法

    instanceof操作符用于判断某个对象是否是某个类型的对象。

    格式如下:

    o instanceof C

    o表示对象,C表示类型,如果o是C的对象表达式返回true,否则返回false。

    下面的代码用于判断参数是否为整数:

public void f(Object o){

   if(o instanceof Integer){

     System.out.println("参数是整数!");

   }

}

2、使用场合

     在对一个对象进行强制类型转换的时候,如果类型不匹配,就会产生java.lang.ClassCastException异常。例如下面的代码:

      Animal a = new Cat();

      Dog d = (Dog)a;

    上面的代码从语法上看没有问题,但是逻辑上是要把猫强制转换成狗,我们知道它不能转换,事实上也不能转换,程序能够编译通过,但是运行的时候就会报错:java.lang.ClassCastException.

    这个问题很容易发现,有时候却不怎么容易发现,例如下面的代码:

public void f(Animal a){

   Dog d = (Dog)a;

   ...

}

    参数的类型是Animal,能不能强制转换成Dog呢?不一定,所以为了避免因为a不是Dog而转换出错,就需要使用instanceof进行判断了。上面的代码可以改成下面的样子:

public void f(Animal a){

   if(a instanceof Dog){

       Dog d = (Dog)a;

       ...

   }

}

    这样就可以避免ClassCastException异常了。

3、使用时候的注意事项

a)在使用的时候,instanceof前面的类型是已知的(例如上面的例子中a的类型是Animal),instanceof后面的类型应该与声明变量使用的类型有关系,通常应该是子类。例如下面的代码:

  Number x = 0;
  System.out.println(x instanceof Integer);   // 正确
  System.out.println(x instanceof Number);  // 正确
  System.out.println(x instanceof Object);  // 正确
  System.out.println(x instanceof String);  // 错误

第1行声明了x的类型是Number。第2行判断x是不是Integer类型,是合法的,因为Integer是Number的子类。第3行是合法的,就是Number类型本身。第3行也是合法的,因为Object是Number的祖先类。第5行是错误的,因为String类与Number类没有任何关系。实际上第3行和第4行的结果肯定是true。有意义的是第2行。

b)在进行判断的时候指的是实例而不是引用,例如下面的代码将输出false。

  String tt=null;
  System.out.println(tt instanceof String);

使用String定义了引用tt,但是没有指向任何实例,所以要判断它是不是String的实例,返回值就是false,因为他不是实例。

李绪成 CSDN Blog:http://blog.csdn.net/javaeeteacher
CSDN学生大本营:
http://student.csdn.net/space.php?uid=124362
如果喜欢我的文章,就加我为好友:
http://student.csdn.net/invite.php?u=124362&c=7be8ba2b6f3b6cc5

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值