单个对象内存图
public class Test {
public static void main(String[] args) {
Student stu = new Student();
System.out.println(stu);
System.out.println(stu.name+": "+ stu.age);
stu.name = "张三";
stu.age = 18;
System.out.println(stu.name+": "+ stu.age);
stu.study();
}
}
class Student{
String name;
int age;
public void study(){
System.out.println("好好学习!");
}
}
- 上述代码所对应的内存图
![在这里插入图片描述](https://img-blog.csdnimg.cn/0200ce842cb94488b6c70ef323f97075.png#pic_center)
- 注意:
1.Student类中成员方法study()不会加载进堆内存,但堆内存会存储成员方法的地址;
2.方法执行完,依次从栈中弹出;
3.使用Student类创建对象时,需要先把Student.class字节码文件加载进方法区,才可实例化对象。
两个对象内存图
public class Test {
public static void main(String[] args) {
Student s1 = new Student();
System.out.println(s1);
s1.name = "张三"; s1.age = 18;
System.out.println(s1.name+": "+ s1.age);
s1.study();
Student s2 = new Student();
System.out.println(s2);
s2.name = "李四"; s2.age = 27;
System.out.println(s2.name+": "+ s2.age);
s2.study();
}
}
class Student{
String name;
int age;
public void study(){
System.out.println("好好学习!");
}
}
- 上述代码所对应的内存图
![两个对象内存图](https://img-blog.csdnimg.cn/2a60094a4f454404a1a700299f8eac82.png#pic_center)
两个引用指向同一块地址内存图
public class Test {
public static void main(String[] args) {
Student s1 = new Student();
s1.name = "张三";
Student s2 = s1;
s2.name = "李四";
System.out.println(s2.name);
s2.study();
}
}
class Student{
String name;
public void study(){
System.out.println("好好学习!");
}
}
- 上述代码所对应的内存图
![两个引用指向同一块地址](https://img-blog.csdnimg.cn/0fb7496f089e441d96b84bd9295ae923.png#pic_center)