我想再次学习Java,因为我几年前就离开了 . 读一本书我在理解Java如何在堆中和堆栈中分配内存时遇到了问题 .
这就是我所理解的 - 我会尝试用例子来谈论它 .
class TestA {
int a;
void methodA(int b) {
a = b;
}
int getA() {
return a;
}
}
这是一个展示不同情况的示例类 . 这是我的主要内容:
int b = 3;
TestA obj = new TestA();
obj.methodA(b);
obj.getA();
那会发生什么?
## BEGIN
堆栈 - 为主要功能占用一些内存
HEAP - 空的
## int b = 3
堆栈 - [为主要功能占用一些内存 - >这里我们有b]
HEAP - [空]
## TestA obj = new TestA()
堆栈 - [为主要功能占用一些内存 - >这里我们有b和对TestA的引用]
HEAP - [为int a记忆]
## obj.methodA(b);
堆栈 - [为主要功能占用一些内存 - >这里我们有b和对TestA的引用]
HEAP - [为int a取一些内存]和[methodA的另一个内存]
## execute methodA(int b)
STACK - [为主函数占用一些内存 - >这里我们有b和对TestA的引用]和[占用methodA()的内存 - >这里我们在这个函数中使用了b]
HEAP - [为int a取一些内存]和[methodA的另一个内存]
我们有:
对象和实例字段(原始与否)在堆中
堆栈中的函数和作用域值
这样对吗?