比如我有两个类,分别是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保存在堆还是栈啊,很困惑
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保存在堆还是栈啊,很困惑
引用是指向堆内存的一个指针(这里所说的指针特指java的句柄,与C中的指针不同),而指针本身也是一个数据类型。
a在方法中,因此a变量所指代的指针存放在方法栈中,而this是成员变量,因此this指针存放在a指针所指代的对象所在的堆地址中。
public class TestB
{
public static void main(String[] args)
{
TestA a = new TestA();
//a在栈里,它指向 在堆中的new TestA()
//a的list 也在栈内,它指向堆中的new ArrayList<String>()
a.list.add("Test");
}
}