基本类型和抽象类型的类型转换是不同的,基本类型的转换会改变内存中的数据;抽象类型并不对对象本身做更改,而是改变可见性。
- 基本类型转换
- 自动类型转换(隐式类型转换)
这是由系统自动完成的类型转换,由JVM自动完成。
转换规则是对类型进行提升,也可以说是从存储范围小的类型转换到到存储范围大的类型:byte->short/char->int->long->float->double
示例代码:
short shortFigure = 1;
int commonFigure = shortFigure;//赋值时,JVM首先将shortFigure转换为int型,然后赋给commonFigure
同样的,如果我们对shortFigure进行操作,比如shortFigure+1运算会自动提升表达式的类型,运算将返回int型的结果。
- 强制类型转换(显式类型转换)
开发人员可以在程序中显式转换变量的类型。这种类型转换可能会损失精度。
简单类型的转换规则是从存储范围大的类型到存储范围小的类型:
double->float->long->int->short/char->byte
示例代码:
double doubleFigure = 1.10;
int commonFigure = (int)doubleFigure;
- 抽象类型转换
某些情况下父类可以转换为子类。
示例代码:
Parent parentObject = new Child();
Child childObject = (Child) parentObject;
与简单类型的转换机制不同,上述代码本质上并没有对对象做任何的改变,改变的仅仅是对象引用。
parentObject是一个Parent类的引用,它引用所指向的对象是一个Child对象。childObject也指向这个Child对象,不同的是他是一个对Child类的引用。
它们的不同仅仅是对Child对象的可见性。