首先,狹義上的強制類型轉換指的是引用類型,且是父類向子類轉換,這種轉換只牽扯到引用名義類型的轉換,具體的對象內存沒有發生一點變化。
而基本類型的轉換與此不同,其數據確實發生了變化。如果是基本類型和其包裝類的相互轉化,實際上調用是Integer.parseInt()和Integer.valueOf()來完成。
父類向子類進行強制轉換,如果成功不會有任何數據丟失,如果不是其子類,那么會報錯。基本類型之間的轉換,如果是大范圍的向小范圍的轉換,確實 有可能會發生數據丟失或精度丟失。
實例:
public class Main { public static void main(String[] args) { Base base = new Child(); base.test(); System.out.println(base.getClass().getName()); base = (Base) base; base.test(); System.out.println(base.getClass().getName()); } } class Base { public void test() { System.out.println("我是父類方法"); } } class Child extends Base { @Override public void test() { System.out.println("我是子類方法"); } public void childSelf(){ System.out.println("我不是重寫了父類的方法"); } }
運行結果:
我是子類方法
com.hubu.zhoulei.algorithm.Child
我是子類方法
com.hubu.zhoulei.algorithm.Child