• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C#(对象引用)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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);
这个时候显示的就是:
    您好
    你坏 
这就说明了,两个对象是引用的不是同一块堆内存 



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#/VB.NET将PDF转为Excel发布时间:2022-07-13
下一篇:
【个人吐槽】C、Delphi、C#、java摘抄发布时间:2022-07-13
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap