2014-01-27 93 views
3

考慮到這些類:內存分配上溯造型

public class Animal{ 

} 

public class Dog extends Animal{ 

} 

public AnimalTest(){ 
    public static void main(String[] args){ 
     Dog d = new Dog(); 
     Animal a = d; 
    } 
} 

我的問題是,因爲我在Animal a = d;執行上溯造型它消耗的機器上一個新的內存分配或不會使用分配給Dog d = new Dog();內存

+0

'動物a = d;'只是一個參考,沒有內存分配。 – lichengwu

回答

0

動物a = d;

a只是一個引用,引用的內存分配在方法堆棧(或jvm堆棧,而不是堆)中。

這就是當調用方法main時,JVM將分配一個包含引用空間的堆棧。

+0

謝謝你的迴應,我想問一下,因爲Animal a是一個參考,它被分配到Dog d分配的堆棧上嗎?在堆上? – anathema

+0

@anathema是的,'新Dog()'在JVM堆上分配。 – lichengwu

1

實際對象或其內存佔用不受影響。只是創建對象的新引用。唯一的區別是參考a只能調用超級動物中可用的方法或訪問屬性。