2014-01-27 6 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;상의 upcasting를 수행하거나이 Dog d = new Dog();에 할당 된 메모리를 사용할 수 없기 때문에 제 질문은

+0

'Animal a = d;'단지 참조, 메모리 할당 없음. – lichengwu

답변

0

동물 a = d;

a는 기준 및 기준의 메모리에있어서의 스택 (또는 JVM 스택, 힙 없다)에 할당된다.

즉, main 메서드를 호출하면 JVM이 참조 공간을 포함하는 스택을 할당합니다.

+0

응답 해 주셔서 감사합니다. Animal은 참조이므로 Dog d가 할당 된 스택에 할당됩니다. 힙에? – anathema

+0

@anathema 예,'new Dog()'는 JVM 힙에 할당됩니다. – lichengwu

1

실제 개체 또는 해당 메모리 사용 공간은 영향을받지 않습니다. 객체에 대한 새로운 참조가 생성됩니다. 유일한 차이점은 참조 a이 Super Class Animal에서 사용 가능한 메서드 또는 액세스 속성 만 호출 할 수 있다는 것입니다.