对象内存
观察下面代码
public class Phone {
//成员变量
String cpu;//cpu
int rom;//内存
public static void main(String[] args) {
Phone iphone=new Phone();
System.out.println(iphone);
iphone.cpu="A11";
iphone.rom=4;
System.out.println(iphone.cpu);
System.out.println(iphone.rom);
System.out.println("--------------------------------------");
Phone huawei=new Phone();
System.out.println(huawei);
huawei.cpu="海思麒麟";
huawei.rom=8;
System.out.println(huawei.cpu);
System.out.println(huawei.rom);
}
}
对象 调用 方法内存图
观察下面的代码
public class Phone2 {
//成员变量
String cpu;//cpu
int rom;//内存
public void call(String name){
System.out.println("打电话给 "+name);
}
public static void main(String[] args) {
Phone2 iphone=new Phone2();
System.out.println(iphone);
iphone.cpu="A11";
iphone.rom=4;
iphone.call("乔布斯");
System.out.println(iphone.cpu);
System.out.println(iphone.rom);
System.out.println("--------------------------------------");
Phone2 huawei=new Phone2();
System.out.println(huawei);
huawei.cpu="海思麒麟";
huawei.rom=8;
huawei.call("任正非");
System.out.println(huawei.cpu);
System.out.println(huawei.rom);
}
}
对象调用方法时,根据对象中方法标记(地址值),去 方法区 寻找方法信息。
如此,即便有多个对象,方法信息只保存一份,节约内存空间。
对象 传递到方法中内存图
观察下面代码
public class Phone3 {
//成员变量
String cpu;//cpu
int rom;//内存
public void call(String name){
System.out.println("打电话给 "+name);
}
}
public class TestPhone {
//修改手机
public static void repair(Phone3 p){
System.out.println(p);
p.cpu="A13";
p.rom=8;
}
public static void main(String[] args) {
Phone3 iphone=new Phone3();
iphone.cpu="A11";
iphone.rom=4;
System.out.println(iphone);
System.out.println(iphone.cpu);
System.out.println(iphone.rom);
System.out.println("-------------------");
repair(iphone);
System.out.println(iphone.cpu);
System.out.println(iphone.rom);
}
}
打印内存地址
public class Phone {
//成员变量
String cpu;//cpu
int rom;//内存
public static void main(String[] args) {
Phone iphone=new Phone();
System.out.println(iphone);
System.out.println("--------------------------------------");
Phone huawei=new Phone();
System.out.println(huawei);
}
}


