创建对象对应的jvm内存图(二)

引用和对象的区别

引用和对象怎么区分?
"引用"是啥? 是存储对象内存地址的一个变量。
"对象"是啥? 堆内存中new出来的

简单说:
只要这个变量中保存的是一个对象的内存地址,那么这个变量就叫做"引用"

思考: 引用一定是局部变量吗?
不一定,成员变量也可以是一个引用

举例说明:


public class User{
    //类 = 属性+ 方法
    //以下3个都是属性,都是实例变量(对象变量)
    //用户id
    //访问id不能这样 User.id(这是错误的,实例变量不能用类名访问。)
    //id的访问必须先造对象,然后对象有了,才能访问对象的id
    int id;//成员变量又叫做实例变量
    //用户名
    String username;

    //住址
    //Address  是一个引用数据类型
    //addr是成员变量并且还是一个实例变量
    /addr是一个引用
    Address addr;
}
public class Address1{

    //城市
    String city;
    //编码
    String street;
    //邮政编码
    String zipcode;
}
public class TestClass {
    public static void main(String[] args) {
        Address  a = new Address();
        a.city ="beijing";
        a.street ="daxing";
        a.zipcode = "12132143";
        //用户对象
        User u = new User();
        System.out.println(u.id);//0
        System.out.println(u.username);//null
        System.out.println(u.addr); //null
        u.id = 12324;
        u.username ="zhangsan";
        u.addr = a;
        //输出zhangsan他是哪个城市的
        System.out.println(u.username + "是"+u.addr.city+"城市的");
        //拆分成以下代码和上面效果完全一样,原理一样,不同的是代码多了两个变量
//        Address ad = u.addr;
//        String  zhuzhi = ad.city;
//        System.out.println(zhuzhi);
        
    }
}

内存图如下

难度较大的内存图

重点突破

        int    x=100;

= 代表赋值运算,“赋值"中有一个"值”
x变量中的值是100。将100复制一份给y

        int y = x;

x表示:将x变量中保存的值100复制一份给y

对照图片尝试理解下面

        Address k = new Address(); //Address k =0x12132
        Address m = k;  //这里表示将k变量中保存的0x12132复制一份传给了m

尝试画这个代码的图

public class T{
    A a;

    public static void main(String[] args) {
        D d =new D();
        C c =  new C();
        B b= new B();
        A a = new A();
        T t = new T();

        c.d =d;
        b.c = c;
        a.b =b;
        t.a =a;
        //编写程序代码通过t来访问d中的i
//        D t.a.b.c.d = d;
        System.out.println(t.a.b.c.d.i);

        d.i =20;
        System.out.println(t.a.b.c.d.i);

        D d1 = t.a.b.c.d ;
        System.out.println(d1.i);
        d1.i =30;
        System.out.println(d.i);

    }

}
class A {
    B b;
}

class B {
    C c;
}
class C {
    D d;
}
class D {
    int  i;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

piepis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值