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条)

报告相同问题?

悬赏问题

  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码