java里面的内存

Person p = new Person();//Person类中有name、age两个成员变量

这段代码创建了一个p变量,一个Person对量。Person对象包含两个Field,而Field是需要内存来存储的,因此,当创建Person对象时,必然需要有对应的内存来存储Person对象的Field。Person对象位于堆内存中,P作为引用变量,位于栈内存中。两者关系如下:



在java中,每new一个对象,就会在堆内存中开辟相应的空间,java程序不允许直接访问堆内存中的对象,只能通过该对象的引用来操作对象。上图中,p作为引用变量,只存储了一个地址值,并未包含任何实际数据,但它指向实际的Person对象,当访问p引用变量的Field和方法时,实际上是访问p所引用对象的Field和方法;如果堆内存中的对象没有任何变量指向该对象时,那么程序将无法访问该对象,该对象就变成了垃圾,java的垃圾回收机制将回收该对象。下面举例子来说一下引用


例1:

new两个对象,那么在堆内存中就会有两个对象。p1、p2分别指向各自的引用

        Person p1 = new Person();
        Person p2 = new Person();
        
        p1.setName("王三");
        p2.setName("李四");
        
        System.out.println(p1.getName());
        System.out.println(p2.getName());


结果

王三
李四

引用图


各自修改各自的互不干扰。

用例2,两个引用变量,指向同一对象,那么当一个引用变量操作对象的方法改变Field时,另一个引用对象再获取到的就是改变后的值。具体例子如下

Person p1 = new Person();
        Person p2=p1;
        p1.setName("王三");
        System.out.println(p1.getName());
        System.out.println(p2.getName());
        
        p2.setName("李四");
        System.out.println(p1.getName());
        System.out.println(p2.getName());


运行结果如下:

王三
王三
李四
李四


图示如下:




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值