对象分配机制:
//下面有一段代码
Person p1 = new Person();
p1.age = 10;
p1.name = "小明";
Person p2 = p1 ; //把p1赋给了 p2 , 让 p2 指向 p1
System.out.println(p2.age);
请问:p2.age 究竟是多少? 并画出内存图:
内存分析图:
对代码进行逐步分析:
- Person p1 = new Person(); // Person p1 是对Person变量 p1 的声明 ; new Person( )则赋予p1数据空间 , 这里假设数据空间的地址为0x0011, 则p1指向地址为0x0011的空间,如图中所示
- p1.age = 10; p1.name = "小明"; //将age = 10 , name = "小明" 存储在地址为0x0011的数据空间中, 而name变量接收的是 存储在方法区常量池中的字符串变量----"小明"的引用地址0x0022
- Person p2 = p1 ; //该语句表示将p1赋给了p2 , 也就是将p1指向的引用地址同样赋予p2 , 也就是让p2也指向地址为0x0011的数据空间
- 此时输出p2.age , 则输出的p2.age 与 p1.age 是一样的 都是地址0x0011空间下的age变量 , age=10;