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


  • 相关阅读:
    10. 分离链接散列表
    9. avltree
    8.二叉查找树
    socket listen参数中的backlog 的意义!
    TCP 三次握手和四次挥手中的ACK 为什么总是SYN + 1 或者 FIN +1 而不是+ 其他数值?
    eclipse 快捷键
    内部类
    rabbitmq AmqpClient 使用Topic 交换机同一个channel 同时多个队列 ,多个交换机,C++代码示例
    rabbitMQ 问题
    rabbitmq AmqpClient 使用Topic 交换机投递与接收消息,C++代码示例
  • 原文地址:https://www.cnblogs.com/BrightMoon/p/2923322.html
Copyright © 2011-2022 走看看