instanceof运算符&引用变量的强制类型转换

点击上方蓝字关注我们

 instanceof运算符

instanceof是Java语言中的一个二元运算符,它的作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口、抽象类、父类)的实例,即它左边的对象是否是它右边的类的实例该运算符返回boolean类型的数据。

常见的用法为:

result=object instanceof class;

如果object是clas的一个实例,那么instanceof运算符返回true;如果object不是class的一个实例,或者object是null,那么instanceof运算符返回false。

在使用instanceof运算符时需要注意:instanceof运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系,否则会引起编译错误。

下面的程序示范了instanceof运算符的用法。

上面程序通过Object hello = "hello";代码定义了一个hello变量,这个变量的编译时类型是Object类,但实际类型是String。因为Object类是所有类、接口的父类,因此可以执行hello instanceof String和hello instanceof Math等。

但如果使用String a = "hello";代码定义的变量a,就不能执行a instanceof Math,因为a的编译类型是String,String类型既不是Math类型也不是Math类型的父类,所以这行代码编译就会出错。

instanceof运算符的作用是:在进行强制类型转换之前,首先判断前一个对象是否是后一个类的实例,是否可以成功转换,从而保证代码更加健壮。

 引用变量的强制类型转换

编写java程序时,引用变量只能调用它编译时类型的方法,而不能调用它运行时类型的方法,即使它实际所引用的对象确实包含该方法。如果需要让这个引用变量调用它运行时类型的方法,则必须把它强制类型转换成运行时类型,强制类型转换需要借助于类型转换运算符。

类型转换运算符是小括号,其用法是:(type)variable,这种用法可以将variable变量转换成一个type类型的变量。除此之外,这个类型转换运算符还可以将一个引用类型变量转换成其子类类型。但这种强制类型转换不是万能的,需要注意以下两点:

1)基本类型之间的转换只能在数值类型之间进行,这里所说的数值类型包括整型、字符型和浮点型。但数值类型和布尔类型之间不能进行类型转换。

2)引用类型之间的转换只能在具有继承关系的两个类型之间进行,如果是两个没有任何继承关系的类型,则无法进行类型转换,否则编译时会出现错误。

下面是进行强制类型转换的示范程序,说明了哪些情况可以进行类型转换,哪些情况不可以进行类型转换。

考虑到进行强制类型转换时可能出现异常,因此进行类型转换之前应先通过instanceof运算符来判断是否可以成功转换,例如上面的String s = (String)objPri,为了让程序更加健壮,可以将代码改为以下:

if(objPri instanceof String) {
           String s = (String)objPri;
      }

instanceof和(type)是java提供的两个相关的运算符,通常先用instanceof判断一个对象是否可以强制类型转换,然后再使用(type)运算符进行强制类型转换,从而保证程序不会出现错误。

我知道你在看

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值