java内存变化图
# 代码
public class Person {
String name;
int age;
public void show(){
System.out.println("姓名:"+name+",年龄:"+age);
}
}
public class TestPerson {
public static void main(String[ ] args) {
// 创建p1对象
Person p1 = new Person();
p1.age = 24;
p1.name = "张三";
p1.show();
// 创建p2对象
Person p2 = new Person();
p2.age = 35;
p2.name = "李四";
p2.show();
}
}
内存变化过程
一、
public class TestPerson {
public static void main(String[ ] args) {
// 创建p1对象
Person p1 = new Person();
图1
main中的p1为null。
0x11地址对应的是
public class Person {
String name;
int age;
public void show(){
System.out.println(“姓名:”+name+",年龄:"+age);
}
对象还未赋值,默认初始值为0
二、// 创建p1对象
Person p1 = new Person();
p1.age = 24;
p1.name = “张三”;
p1.show();
图2
创建p1对象,在图1中找到p1,对应的是未赋值的对象,地址为0x11.
然后对p1.age赋值24,p1.name字符串为“张三”(注意:字符串在java里是类),p1.show()有隐式参数,默认传this:,在此处this为0x11(p1).
补充:
public class Person {
String name;
int age;
public void show(){
System.out.println(“姓名:”+this.name+",年龄:"+this.age);
}
这里的this指向哪个对象,就用哪个对象的name和age,即此处调p1.
三、// 创建p2对象
Person p2 = new Person();
p2.age = 35;
p2.name = “李四”;
p2.show();
p1.show()执行完消失。
过程和p1一样,但是类不用再定义一次,就好像表格里的表头,无需再定义。