-
类全局变量的Reference保存在堆中还是栈中5
比如我有两个类,分别是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保存在堆还是栈啊,很困惑。
希望各位大侠解惑,谢谢2011年8月26日 10:25
5个答案 按时间排序 按投票排序
-
采纳的答案
static变量的引用在方法区,方法区可以位于堆上也可以位于栈上
非static变量的引用都在java堆上,跟对象是一起的
只有方法调用的时候,才会有java栈的操作,才会将引用入栈、出栈,但这也只是临时的,方法调用结束后,栈帧就废弃了
所以,在main方法中,本身是一个方法调用,java栈有main方法的帧,new出来的TestA中的list对象本身在堆上,引用也在堆上,但.add操作的时候会将堆中list的引用入栈以完成add操作2011年8月26日 11:28
-
如果楼主对这个问题很感兴趣,那么只有深入理解的jvm的工作原理才能理解的更透彻
我觉得lz看下《深入java虚拟机》第二版后对这个问题就大彻大悟了2011年8月26日 12:05
-
public List<String> list = new ArrayList<String>();
这个list在栈中,new ArrayList<String>()在堆中,引用list指向堆中new 的ArrayList
TestA a = new TestA();
a也在栈中,new TestA()在堆中,引用a指向堆中new的 TestA(),注意这个引用a指向的是TestA的对象a.list.add("Test");
调用对象a的成员变量list的add方法,传入字符串参数"Test"
综上,a list都是在栈中,只是指向不同而已2011年8月26日 10:41
相关推荐
在C++中,声明一个类,并且定义一个全局变量,练习全局变量的使用。注意全局变量的使用技巧和方法。
VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量VC中如何定义全局变量...
用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。
在A中定义有全局变量X(或类的静态成员变量),则在动态库B中访问的X,与可执行程序C中访问的X是同一个变量还是两个不同的变量? 答案:是两个不同的变量。 2. 工程中包含动态库A,动态库B,可执行程序C。C依赖于A和...
当时想到的就是使用全局变量,在 app.js 中定义好全局变量,点击组件页面时就修改全局变量的值,父页面同样使用全局变量的值,这样一来就可以动态打开/关闭弹出层且传递值了。 下面先看看 app.js 中怎么定义的: ...
根据 C++ 标准,全局变量的初始化要在 main 函数执行前完成,常识无疑,但是这个说法有点含糊,main 函数执行前到底具体是什么时候呢?是编译时还是运行时?答案是既有编译时,也可能会有运行时(seriously), 从...
那么我们在Application创建的时候初始化全局变量,同一个应用的所有Activity都可以取到这些全局变量的值,换句话说,我们在某一个Activity中改变了这些全局变量的值,那么在同一个应用的其他Activity中值就会改变。
全局变量、局部变量、静态全局变量、静态局部变量的区别
在多文件项目中使用全局变量进行参数传递的方法总结
比较局部变量、全局变量、堆、堆栈、静态和全局的区别和联系。
变量可以分为全局变量、静态全局变量、静态局部变量和局部变量 按存储区域分:全局变量、静态全局变量和静态局部变量都存放在内存的全局数据区,局部变量存放在内存的栈区 按作用域分:全局变量在整个工程文件内都...
VB 全局变量举例 VB 全局变量举例 VB 全局变量举例
引用类型的全局变量内存分配在堆上,值类型的全局变量分配在栈上 局部变量内存分配可能在栈上也可能在堆上 堆和栈的简单说明: 1.栈(操作系统):由操作系统自动分配释放 2.堆(操作系统): 一般由程序员分配释放...
Spring MVC配置Freemarker全局变量,实现应用全路径
静态全局变量,静态局部变量,全局变量,局部变量静态全局变量,静态局部变量,全局变量,局部变量
目标:在一个线程运行的时候,主程序或者另一个线程,通过改变全局变量实时改变目标变量的做法,在linux下用make编译
labview功能性全局变量的详细使用,避免局部变量的数据争抢
altium designer 过程绘图过程中,经常要修改期间属性,许多相同的器件,如果逐一修改,会很浪费时间,特总结全局变量改写,以节省时间。 现在分享 希望对大家有用
该MFC参考含盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容。 本书目录 · 层次结构图 直观的描述MFC中各类的关系。 · MFC类 详细解说MFC库中的每个类和头文件信息。 · MFC宏和全局 详细解说MFC...
Android中用Application类实现全局变量