比如我有两个类,分别是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保存在堆还是栈啊,很困惑

解决方案 »

  1.   

    首先,你要把引用和对象两个概念分开。
    引用是指向堆内存的一个指针(这里所说的指针特指java的句柄,与C中的指针不同),而指针本身也是一个数据类型。
    a在方法中,因此a变量所指代的指针存放在方法栈中,而this是成员变量,因此this指针存放在a指针所指代的对象所在的堆地址中。
      

  2.   

    http://wenku.baidu.com/view/e5d63621482fb4daa58d4b8b.html自己看
      

  3.   

    a是对对象的应用 保存在栈中,你new出来的对象保存在堆中!
      

  4.   

    类里面的属性也一样啊~声明的引用放在栈中,new出来的对象在堆中~没啥好纠结的~
      

  5.   


    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");  
      }  
    }
      

  6.   

    你想的太复杂了,不是说在Test里面的东西会因为Test在堆里面而在堆里面,引用就在栈里面指向堆里面的对象。