关于Java马士兵教程里面的内存疑点

来源:百度知道 编辑:UC知道 时间:2024/07/03 01:10:53
马老师分析内存的时候,我有个疑点没看明白。内存中heap装的是new出来的对象。stack装的是局部变量。data segment装的是静态变量字符串常量(这里字符串常量有没有final关键字?)。code segment存放代码。我写短代码你看下。
public class A{
public String name;
public int age;
}
public Class Test{
public static void main(String[] args){
A a = new A();
a.name ="张三";
a.age = 13;
}
}
我想问的是A类中的熟悉name和age应该分配到内存的那个部分?请高手指教。

new A的时候在堆区开辟内存空间,栈区创建内存地址引用指向。
类的函数成员都放在类所开辟内存空间的堆区中。
字符串应该存放在相当于堆区的“字符串池”中。因为字符串是引用类型,每次赋值会开辟新的引用内存空间。所以Java中才出现了StringBuffer这样的类。
类的函数成员方法中的局部变量的值类型是存放在栈区的,引用类型的引用句丙也存放在栈区,引用类型内存空间开辟在堆区。
`
综上所述:name & age是存放在new A时开辟的堆区内存空间中的。

stack中

应该是stack中的。

存放的位置是heap中,因为属性属于类中对象的成员,而对象的成员是被分配到所在对象所在的堆中的内存空间中的,如果说A类存在aaa方法在该方法中定义一个bbb的变量,那么这样的变量才属于局部变量应该分配到stack中.