首先说说什么是类型转换,用简单的话来说,类型转换是将一个类型转换为另一个类型的过程,这里的类型可以是一个类,也可以是一个接口。在 Java 编程中,类型转换可以应用于基本数据类型,也可以应用于引用类型。
当转换基本数据类型的时候,可以分成低精度转高精度,和高精度转低精度。
低精度 -> 高精度
byte -> short -> char -> int -> long -> float -> double
高精度 -> 低精度
double -> float -> long -> int -> char -> short -> byte
如果转换是从精度低的类型到精度高的类型,它被称为隐性转换或者自动转换。比如说我们可以把一个byte变量值直接赋给一个int变量,编译器会进行自动类型转换。如果转换是从精度高的类型到精度低的类型的时候,被叫做显性转换或者手动转换,就是说需要加强制转换符。例如,把double变量赋值给int,就需要加强制转换赋(int)。这里要注意,每当我们做显性转换的时候,都要十分小心,因为精确度由高到低的转换Java编译器并不会报错,但是结果有可能并不是期待的结果。
接下来说一说引用类型转换,根据Java编程语言的规则,一般情况,引用类型只有存在父子关系的类或者接口才能彼此转换。如果试图将两个不相关的类之间进行类型转换,会导致编译错误。这里说一般,是因为有一些特殊情况,比如我们可以适合的 字符串 转转换成别的类型。
如果是转换有父子继承关系的类或者接口的时候的时候,我们可以将对象可以从子类转换为父类,而且不需要显式转换。
另一方面,当对象从父类转换为子类的时候,则需要显式转换,但要注意,虽然超类转子类不会产生编译错误,但如果对象并不是子类的实例,那么运行时也会出现异常ClassCastException。