假设我有一个这样的代码段: -
class A {
void help() {
Help helper = new Help();
}
}
在上面的例子中,对象引用帮助器将在堆栈中分配内存。
现在如果我有这样的案例
class A {
Help helper = new Help();
}
在这种情况下,helper将不会在堆栈帧内部分配内存(我确信这样)。 它会像一个实例变量一样运行,并在堆上的对象内部分配空间。
答案 0 :(得分:0)
此类声明仅适用于您的实例。每次实例化A类时都会分配辅助属性。
它绝对是一个实例变量。它进入堆
为了分隔实例和变量,您可以使用静态属性。然后它链接到类,所以它进入代码段。
答案 1 :(得分:0)
是的,你是对的。在第二种情况下,Help
对象将表现为类的实例变量。
在函数内声明对象时,堆栈内存用完(局部变量)。而对于例如变量,则使用堆内存。
答案 2 :(得分:0)
betwin对象和引用变量之间存在差异。例如:
//Here helper is the reference variable
Helper helper = new Helper ();
每当我们创建任何对象(new Helper()
)时,它总是在堆空间中创建,并且它是堆栈空间中的引用(helper
)
Java Stack内存用于执行线程。他们包含 方法特定值,短期和对其他的引用 堆中的对象从方法中被引用。
所以两个对象存储在堆中,但两个引用变量存储在不同的堆栈中。
答案 3 :(得分:0)
是的,在第二种情况下,只要helper
的对象在第一种情况下初始化但是,内存将被分配给对象class A
。在堆栈上分配给名为void help()
的函数,并且一旦函数结束就会被销毁,因为helper
对象是此函数的局部变量。