##首写我们编辑一个代码
public class User {
int id; //id
String
name; //账户名
String
pwd; //密码
public User(int id, String name) {
this.id = id;
this.name = name;
}
public static void main(String[ ]
args) {
User
u1 = new User(100, “高小七”);
User
u3 = u1;
System.out.println(u1.name);
u3.name="张三";
System.out.println(u1.name);
}
}
创建user类信息(包括user构造器和常量)
2 (1)在栈中创建main方法的栈帧(包括局部变量u1,u2)。
(2)构建user类,先将堆中对象地址赋予局部变量u1
(3)堆中新建对象(成员变量及方法);方法区定义常量信息。之后回收user类的栈帧。
(4)使用new调用user构造方法。先将堆中对象地址赋予构造方法中的隐藏参数this,并给user方法中的局部变量初始化, user构造器的栈帧。;通过this.id=id对堆中属性初始化。
(5)在栈中再次创建一个user类的栈帧,将堆中对象的地址赋予局部变量u2,这样u2和u1具有相同的地址,指向同一个对象。
(6),在堆中建立一个新对象,属性只有name,在利用栈中的user方法栈帧赋值给新对象。同时也将新对象地址赋予u2,创建完“新对象”后立即回收user类栈帧。
(7)当u2的地址发生改变,随之赋予地址给u2的u1地址也发生改变。
3.如此,这个内存图就可以画出来了: