C#(对象引用)

1:关于实例化对象
    我先创建一个FullChannel对象,
    FullChannel fullchannel = new FullChannel();
    这个时候堆栈内存的示意图如下 图片
在栈内存里面有块区域划出来给FullCannel用,在堆内存里面也划出了一块区域用来存储FullCannel里面的数据,并且把堆内存的引用给了栈内存的FullCannel。
现在我再创建一个对象
MyFavor myFavor = fullcannel;
这个时候堆栈内存的示意图如下
图片
执行MyFavor myFavor = fullcannel;的时候也就是把fullcannel在堆内存中的引用给了myFaovr。也就是说两个对象共用一块堆内存。
我要是修改了fullcannel里面的数据,那么我用myFaovr也能看到这个修改过的数据。
例如:
我给fullcannel赋值“你好”
fullcannel = “你好”;
System.out.println(fullcannel);
System.out.println(myFavor);
这个时候会显示两行字:
    你好
    你好 
我继续编写代码将fullcannel的值修改为“您好”
fullcannel = "您好";
Sysout.out.println(fullcannel); 
System.out.println(myFavor);
这个时候显示的就是:
    您好
    您好 
这就说明了,两个对象是引用同一块堆内存的

接下去的才是重点!
我把fullcannel重新实例化对象。
fullcannel = new FullCannel();
这个时候堆栈内存中的示意图变成了这样:
图片 
当执行了fullcannel = new FullCannel();的时候, 就将fullcannel这个对象在堆内存中的引用给清除了。 fullcannel对象又 在堆内存中划分出一块区域并且附上引用。  
好了,那么现在这两个对象引用的就不是同一块堆内存了。
 例如:
我给fullcannel赋值“你好”
fullcannel = “你好”;
myFavor = “你坏”;
System.out.println(fullcannel);
System.out.println(myFavor);
这个时候会显示两行字:
    你好
    你坏 
我继续编写代码将fullcannel的值修改为“您好”
fullcannel = "您好";
Sysout.out.println(fullcannel); 
System.out.println(myFavor);
这个时候显示的就是:
    您好
    你坏 
这就说明了,两个对象是引用的不是同一块堆内存  


转载于:https://www.cnblogs.com/BrightMoon/archive/2013/02/23/2923322.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值