类型转换
1、概述
java中的=号赋值操作,需要=号俩边的类型一致,也就是=号右边的数据的类型要和=号左边的变量的类型保持一致,如果不一致,那么就需要做类型的转换。
分为隐式转换和显示转换。
隐式转换也称为自动转换。
显示转换也称为强制转换/手动转换。
2、分类
2.1 基本类型
(1)隐式转换(Implicit),也是自动转换。
在JVM运行期间,只要满足条件,就可以自动完成类型转换的过程。一般是数据范围比较小的,自动就可以转换为数据范围比较大的类型(基本类型)。
byte a = 1; //byte占一个字节
int b = a; //int占四个字节
//所以数据范围int大于byte,所以a自动转换为byte类型
(2)显示转换(explicit),即手动转换,强制转换
编译器发现类型无法自动转换的情况,就会编译报错,这时候我们确认无误后,就可以进行类型强制转换。
但是这里是存在一定风险的,在基本类型数据中,这个风险主要是可能数据有损失。在引用类型中,将来在运行这个类型转换代码的时候,有可能会抛出类型转换异常(classCastExpection)。
例如下面代码:
int a = 100;
//编译报错,因为a是int类型,b是byte
//把32位int数据,赋值给8位的变量b
//把一个范围大的数据,赋给一个范围小的变量
//这时候是不允许的,也无法类型自动转换。
byte b = a;
//编译通过,自己手动进行了类型转换
//对于基本类型,强制转换就是把多余的位给抹去
//所以这时候可能对数据的值,造成影响
byte b = (byte)a;
2.2 引用类型
(1)隐示转换
Student s = new Student();
Object o = s;
//特点:子类类型的变量,可以自动转为(隐式)父类类型
//上面俩句代码可以合成这一句代码,其实就是把中间变量s给去掉了。
Object o = new Student();
(2)显示转换
Object o = new Student();
Student s = (Student)o;
//特点:父类类型的变量,需要强制转为(显式)子类类型