在方法外声明的Java引用变量存在于堆栈或堆上

时间:2016-08-21 06:07:08

标签: java

 class  Test
 {
     int y=10; // defined as part of the class
     Test obj1 =new Test();

 public void function1(){
    int x = 5; // defined locally
   Test obj2=new Test();
 }

  public static void main(String[] args) 
{
    Test obj = new Test();
}
 }

我们已经知道变量“y”将是gon堆而变量x将继续堆栈但是我的问题是参考变量“obj”哪个是测试类的引用?在堆或堆栈上? 另外,参考变量“obj1”和“obj2”在堆栈或堆上保存在哪里?当然,对象进入堆但是当在函数内部声明时它会进入堆栈但是什么时候在函数外部声明呢?Confused.Please Help。

1 个答案:

答案 0 :(得分:3)

obj1(引用)的值本身是在堆上分配的Test实例的一部分。 obj1指向的值是{em>不同的 Test实例,它也在堆上。

堆栈中唯一的东西是方法中声明的方法和变量的参数。

请注意,由于您已设置的递归无限循环,您第一次调用new Test()将失败。新Test的每个结构都需要构建额外的Test,无限制。您可能会收到StackOverflowError,因为即使没有参数和局部变量,方法调用也会占用堆栈空间。