引用数据类型之间的转换
1.引用数据类型转换和基本数据类型转换一样也是分为两种:
第一种:自动类型转换
第二种:强制类型转换
自动类型转换:自动类型转换主要是指从小范围到大范围的转换
强制类型转换:主要是指从大范围到小范围的转换(也就是父类到子类的转换)
- 如果是小转大则不能使用强制类型转换,使用了就会编译出错
2.引用类型的转换必须要是发生在自己和自己或者父子类之间(也可以是爷孙关系,也就是必须要有继承关系,如果没有继承关系的话就会报错)
3.强制类型转换当中如果转换到的类型时引用指向的子类类型,但不是引用指向的真正的子类的类型的话,则编译通过,运行阶段会出现类型转换异常
eg:Person p=new Worker();
Student s=(Student)p;
这里编译的通过的(因为Student类是Person类的子类),但是运行时会发生引用类型的类型转换异常(因为这里的new对象是Worker类,而转换的目标是Student类)
- 运行阶段出错要比在编译阶段出错更让人难受
4.为了避免发生类型转换异常,我们可以使用instanceof关键字进行判断
具体格式:
if(引用变量名 instanceof 数据类型){
转换
}else{
不能转换
}
- instanceof关键字:
使用方式: 引用变量名 instanceof 数据类型
instanceof关键字可以判断左边的引用变量指向的对象是否为后面的类型,如果是则返回true,如果不是则返回false
一般用于强制类型转换前面的if条件语句中,避免发生类型转换异常