对象的内存解析
Person p1 = new Pserson();
p1.name = "Tom";
p1.isMale = true;
Person p2 = new Person();
Person p3 = p1;
p3.age = 10;
以下图片均参考尚硅谷宋红康版讲解的java
第一行代码解析:
new Person(),只要是new的结构都在堆中,则在堆中开辟一个空间地址为0x12ab,而后在栈空间中声明一个变量p1,因为p1在main方法中,方法中的变量都是局部变量,栈中存放的是p1的局部变量存储地址值0x12ab,而后堆中属性name和isMale没有值:默认初始化为null和false(此也为一个知识点,以后会总结)age赋值为1.第一行代码结束。
第二三行代码解析:
将Tom赋值给name,则null被占用,Tom中的值并不在堆中,而在方法去和常量池中,这里不做细讲。
最后几行解析
Person p3 = p1
这里仅仅是将栈中的p1的地址值赋值给p3,而堆中不创建对象。即:p3中的地址指向0x12ab
对象数组(同理)