面试问的一个问题
定义一个类:
public class A{
public int i=1;
public static void mian(String args[]){
A a=new A();
}
}
运行这个类时,java虚拟机在堆和栈中各保存了哪些数据?求大神解答。
我的回答是在栈中保存了变量i 和 1,及实例化类A的引用a, 在堆中保存了类A的一个对象,从面试官的反应,我应该没答对。
面试问的一个问题
定义一个类:
public class A{
public int i=1;
public static void mian(String args[]){
A a=new A();
}
}
运行这个类时,java虚拟机在堆和栈中各保存了哪些数据?求大神解答。
我的回答是在栈中保存了变量i 和 1,及实例化类A的引用a, 在堆中保存了类A的一个对象,从面试官的反应,我应该没答对。
i和a指向的对象在堆上,引用a在栈上。
如果觉得有些绕,记住一点,只有函数中的局部变量才放在堆栈上。这个局部变量如果是对象,那么引用在堆栈上,对象本身在堆上,如果局部变量是int double等,那么它放在堆栈上。
除此之外,对象的成员变量、静态成员等全部都在堆上。