我试图了解 Java 堆栈和堆内存。通过阅读不同的资料,我得出以下结论:
本地(方法的一部分)声明的基本类型如 int、bytes、char 等存储在堆栈中。
而静态和实例(对象实例或类的一部分)原始类型存储在堆上。
简而言之,局部变量存储在栈上,而实例和静态变量则存储在堆上。
本地引用对象将在堆中创建,而变量将在堆栈中创建。
实例/静态引用对象将在堆中创建变量和对象。
(例如,一个本地的,将在堆栈中car ferrari = new car()
创建一个内存,而实际对象将在堆中。ferrari
堆栈变量ferrari
将具有实际对象的堆位置的引用地址)。
但是在进一步阅读时,我读到在堆栈中内存被分配到前一帧的顶部。这让我对以下情况感到困惑:
问题一:
让我的方法是:
calculate(){
int a=15;
int b=25;
return a+b;
}
但根据堆栈,后入将是 b。所以 a 的值将超出范围,直到从堆栈中使用 b 的值。
程序如何能够在 'b' 之前使用 'a' 的值?对于操作a+b。
问题2:
让我的方法是:
calculate(){
int a=15;
int b=25;
int z= a+b;
int y=a+b;
return y;
}
现在我已经使用变量 a 和 b 来计算'z',变量 y 是如何能够再次访问 a 和 b 的,因为它已经从堆栈中使用了。
我不是Java专家,如果有人能用简单的语言解释一下,我将非常感谢。
慕桂英3389331
相关分类