instanceof的使用以及与引用类型的强制类型转换的关系

我们在编写Java程序时,引用变量只能调用他编译时类型的方法,而不能调用他运行时类型的方法,但是如果需要调用运行时的类型的方法,则必须把它强制类型转换为运行时类型,因此,在进行类型转换时需要注意:

1.基本类型之间的转换只能在数值类型之间进行,比如数值类型和布尔类型之间不能进行类型转换。

2.引用类型之间的转换只能在具有继承关系的两个类型之间进行。

第一点我们可以很容易理解,对于第二点,我们在编程时可能辨别不好是否具有继承关系,但是,别担心,Java语言给我们提供了方便,使用instanceof运算符判断是否可以成功转换,从而避免出现CLassCaseException异常,这样可以保证程序更加健壮。

比如:

if(obj instanceof String)

{

String str=(String)obj;

}

因此,接下来介绍instanceof的用法,instanceof的前一个操作数通常是一个引用类型变量,后一个操作数通常是一个类(也可以是一个接口,可以把接口理解为一种特殊的类),它用于判断前面的对象是否是后面的类,或者其子类、实现类的实例,如果是则返回true,不是返回false。注意,instanceof运算符前面操作数的编译时类型要么与后面的类相同,要么与后面的类具有父子继承关系。

比如:

Object  hello ="hello";

System.out.println(hello instanceof Object);  //返回true

System.out.println(hello instanceof Math); //返回false

时间: 2024-10-29 01:17:39

instanceof的使用以及与引用类型的强制类型转换的关系的相关文章

今天聊一聊Java引用类型的强制类型转换

实际上基本类型也是存在强制类型转换的,这里简单提一下.概括来讲分为两种: 1.自动类型转换,也叫隐式类型转换,即数据范围小的转换为数据范围大的,此时编译器自动完成类型转换,无需我们写代码 2.强制类型转换,也叫显式类型转换,即数据范围大的转换为数据范围小的,此时数据会损失精度,强转也需要我们书写代码来实现,使用需谨慎 下面我们来看看,引用类型的强制类型转换: 同样分两种:隐式和显式 1.隐式强转,就是父类的引用指向子类的对象,例如 Father类和Child类,我们可以这样写: Father f

引用类型的强制类型转换

1.什么时候需要用到强制类型转换 当把子类变量赋给父类引用变量时,这个父类引用变量只能调用父类拥有的方法, 不能调用子类特有的方法,即使它实际引用的是子类变量. 如果需要让这个父类引用变量调用它子类的方法,就必须把它强制转换成子类类型. 2.引用类型之间要强制转换成功需要有什么条件 把父类实例转换成子类类型,则这个对象必须实际上是子类实例才行,否则将在运行时引发ClassCastException. 3.让程序更健壮的写法: 在强制转换前使用instanceof运算符判断是否可以成功转换. 示例

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

一.instanceof运算符 instanceof是Java语言中的一个二元运算符,它的作用是判断一个引用类型的变量所指向的对象是否是一个类(或接口.抽象类.父类)的实例,即它左边的对象是否是它右边的类的实例该运算符返回boolean类型的数据. 常见的用法为:result=object instanceof class.如果object是clas的一个实例,那么instanceof运算符返回true:如果object不是class的一个实例,或者object是null,那么instanceo

jvm强制类型转换

public class Integer_Object { public static void main(String[] args){ Object obj = new ooo(); // Integer i = (Integer) obj; Integer i = Integer.parseInt(obj.toString()); System.out.println(i); } } class ooo{ public String toString(){ return 1+""

C++强制类型转换:static_cast、dynamic_cast、const_cast、reinterpret_cast

1. c强制转换与c++强制转换 c语言强制类型转换主要用于基础的数据类型间的转换,语法为: (type-id)expression//转换格式1 type-id(expression)//转换格式2 c++除了能使用c语言的强制类型转换外,还新增了四种强制类型转换:static_cast.dynamic_cast.const_cast.reinterpret_cast,主要运用于继承关系类间的强制转化,语法为: static_cast<new_type> (expression) dynam

java中强制类型转换

在Java中强制类型转换分为基本数据类型和引用数据类型两种,这里我们讨论的后者,也就是引用数据类型的强制类型转换. 在Java中由于继承和向上转型,子类可以非常自然地转换成父类,但是父类转换成子类则需要强制转换.因为子类拥有比父类更多的属性.更强的功能,所以父类转换为子类需要强制.那么,是不是只要是父类转换为子类就会成功呢?其实不然,他们之间的强制类型转换是有条件的. 当我们用一个类型的构造器构造出一个对象时,这个对象的类型就已经确定的,也就说它的本质是不会再发生变化了.在Java中我们可以通过

C++四种强制类型转换关键字

C语言使用强制类型转换(Type Cast)很简单,不管什么类型的转换,形式都如下: TYPE b = (TYPE)a; c++提供了4种类型转换操作符来应对不同场合的应用. const_cast  static_cast dynamic_cast reinterpreter_cast 4种关键字的使用形式如下: TYPE b = static_cast(TYPE)(a) 1.const_cast 去掉类型的const或volatile属性 const SA ra ={1} ; //ra.i =

C++强制类型转换操作符 dynamic_cast

dynamic_cast是四个强制类型转换操作符中最特殊的一个,它支持运行时识别指针或引用. >>>>>>>>>>>编译器的RTTI设置>>>>>>>>>>> dynamic_cast提供RTTI(Run-Time Type Information),也就是运行时类型识别.它对编译器有要求,需要编译器启动“运行时类型信息”这一选项.当编译器不开启RTTI时,运行含有dynam

C#中,三种强制类型转换的对比

在C#中,我们可以看到三种强制类型转换,比如强制转换成有符号32位整型,可以找到下面三种方式: ① (int)()                ②Convert.ToInt32()         ③int.Parse() 三种转变在有些数据时可以通用,但是用法上仍然有很大的区别 (int)表示使用显式强制转换,是一种类型转换.当我们从 int 类型到 long.float.double 或decimal 类型,可以使用隐式转换,但是当我们从 long 类型到 int  类型转换就需要使用显式