java中变量的内存分配?

时间:2016-01-25 15:18:40

标签: java

假设我有一个这样的代码段: -

class A {
   void help() {
      Help helper = new Help();
   }
}

在上面的例子中,对象引用帮助器将在堆栈中分配内存。

现在如果我有这样的案例

class A {
    Help helper = new Help();
}

在这种情况下,helper将不会在堆栈帧内部分配内存(我确信这样)。 它会像一个实例变量一样运行,并在堆上的对象内部分配空间。

4 个答案:

答案 0 :(得分:0)

此类声明仅适用于您的实例。每次实例化A类时都会分配辅助属性。

它绝对是一个实例变量。它进入堆

为了分隔实例和变量,您可以使用静态属性。然后它链接到类,所以它进入代码段。

答案 1 :(得分:0)

是的,你是对的。在第二种情况下,Help对象将表现为类的实例变量。 在函数内声明对象时,堆栈内存用完(局部变量)。而对于例如变量,则使用堆内存。

答案 2 :(得分:0)

betwin对象和引用变量之间存在差异。例如:

//Here helper is the reference variable
Helper helper = new Helper ();

每当我们创建任何对象(new Helper())时,它总是在堆空间中创建,并且它是堆栈空间中的引用(helper

  

Java Stack内存用于执行线程。他们包含   方法特定值,短期和对其他的引用   堆中的对象从方法中被引用。

所以两个对象存储在堆中,但两个引用变量存储在不同的堆栈中。

enter image description here

答案 3 :(得分:0)

是的,在第二种情况下,只要helper的对象在第一种情况下初始化但是,内存将被分配给对象class A。在堆栈上分配给名为void help()的函数,并且一旦函数结束就会被销毁,因为helper对象是此函数的局部变量