person p1 = new person();
栈空间中声明一个变量叫p1(p1是局部变量,局部变量存放在栈里面),堆空间里面开辟一个空间存放p1有关的数据,这个空间的地址赋值给栈里面的p1(通过这个地址值栈里面的p1可以指向堆里面的对象实体)
堆里面存放了p1类的属性(属性被赋值的话属性值就会更改,没被赋值就是默认值)
p1.name = "tom";
p1.age = 66;
堆里面name和age的默认值被更改
person p2 = new person();
在堆里面又开辟个空间,这个空间的首地址值赋值给栈空间加载的p2,堆里面的空间同样有类的属性和一些默认值
System.out.println(p2.name);
p2的name属性还没有被赋值,输出的结果是null
person p3 = p1;
p3用p1赋值,p3的地址值就是p1的地址值(p3不能叫新创建了一个对象),此时p1p3指向堆空间的同一个对象实体
p3.age = 222;
通过p3将堆里面的age属性的值修改,此时若是输出p1的age(System.out.println(p1.age );)结果就会变成222