guoyu9 2011-08-26 10:25
浏览 216
已采纳

类全局变量的Reference保存在堆中还是栈中

比如我有两个类,分别是TestA 和 TestB
public class TestA {

public List<String> list = new ArrayList<String>();

}

public class TestB {

public static void main(String[] args) {
    TestA a = new TestA();
    a.list.add("Test");
}

}

我看书的时候说所有的reference都保存在栈中,而new出来的对象属性 包括全局属性都保存在堆中, 那么a应该是保存在栈里面,而new出来的TestA中的list这个Reference保存在堆还是栈啊,很困惑。

希望各位大侠解惑,谢谢

  • 写回答

5条回答 默认 最新

  • freishlove 2011-08-26 11:28
    关注

    static变量的引用在方法区,方法区可以位于堆上也可以位于栈上

    非static变量的引用都在java堆上,跟对象是一起的

    只有方法调用的时候,才会有java栈的操作,才会将引用入栈、出栈,但这也只是临时的,方法调用结束后,栈帧就废弃了

    所以,在main方法中,本身是一个方法调用,java栈有main方法的帧,new出来的TestA中的list对象本身在堆上,引用也在堆上,但.add操作的时候会将堆中list的引用入栈以完成add操作

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向