Java中的类型转换用于将一种类型的对象或变量转换为另一种类型。当我们将一种数据类型转换或分配给另一种数据类型时,它们可能不兼容。如果合适的话,它将顺利进行,否则会丢失数据。
Java类型转换分为两种类型。
加宽转换(隐式)–自动类型转换
缩小转换(显式)–需要显式转换
加宽Ť YPE转换如果两个类型兼容和目标类型比源类型较大可能发生。当两种类型兼容并且目标类型大于源类型时,会进行扩展转换。
public class ImplicitCastingExample { public static void main(String args[]) { byte i = 40; //低于转化率无需投放 short j = i; int k = j; long l = k; float m = l; double n = m; System.out.println("byte value : "+i); System.out.println("short value : "+j); System.out.println("int value : "+k); System.out.println("long value : "+l); System.out.println("float value : "+m); System.out.println("double value : "+n); } }
输出结果
byte value : 40 short value : 40 int value : 40 long value : 40 float value : 40.0 double value : 40.0
在下面的示例中,Child 类是较小的类型,我们将其分配给Parent 类类型,后者是较大的类型,因此不需要强制转换。
class Parent { public void display() { System.out.println("Parent class display() called"); } } public class Child extends Parent { public static void main(String args[]) { Parent p = new Child(); p.display(); } }
输出结果
Parent class display() method called
当我们将较大的类型分配给较小的类型时,需要 显式转换。
public class ExplicitCastingExample { public static void main(String args[]) { double d = 30.0; //下面的转换需要显式转换 float f = (float) d; long l = (long) f; int i = (int) l; short s = (short) i; byte b = (byte) s; System.out.println("double value : "+d); System.out.println("float value : "+f); System.out.println("long value : "+l); System.out.println("int value : "+i); System.out.println("short value : "+s); System.out.println("byte value : "+b); } }
输出结果
double value : 30.0 float value : 30.0 long value : 30 int value : 30 short value : 30 byte value : 30
当我们将较大的类型分配给较小的类型时,我们需要显式地进行类型转换 。
class Parent { public void display() { System.out.println("Parent class display() method called"); } } public class Child extends Parent { public void display() { System.out.println("Child class display() method called"); } public static void main(String args[]) { Parent p = new Child(); Child c = (Child) p; c.display(); } }
输出结果
Child class display() method called