zoukankan      html  css  js  c++  java
  • 关于引用对象的使用的一点小理解


    StringBuilder sbText=new StringBuilder("This var for store strings");//

    StringBuilder  sbTextCopy
    =StringBuilder();//②这里也属于语句②的一部分
    new sbTextCopy=sbText;//

    StringBuilder  sbTextCopy2
    =sbText;//

    看了上面的代码,或许你知道我接下来要讲什么?

                很多时候,我们都很随意并且随机的写出②、③那样的代码 。今天有人问我两句代码一样吗?初看都差不多,就是完成sbText内容的复制嘛。可细细推敲一下,两者果然不同,下面根据我的理解,对语句②,语句③逐句分析一下:

     

            语句②:同大学教科书一样这里有三个动作----

                            1、 在堆栈上分配sbTextCopy的引用存储空间(即:StringBuilder sbTextCopy)此空间占4个字节,
                            2、另一个工作就是,在内存的另一空间分配固定大小(又引用类型自身决定)的数据存储空间,这里是用来存实实在在的对象,而不是引用

                            3、把sbTextCopy得值设为第2点的存储空间地址

                            4、把sbTextCopy得值设为sbText存储空间地址(sbTextCopy=sbText)(覆盖了第3步)

                             

           语句③: 1、在堆栈上分配sbTextCopy2的引用存储空间。同上第1点

                          2、把sbTextCopy2得值设为sbText存储空间地址

    如同上面分析:语句③较语句②少了:分配实体存储空间的步骤和将sbTextCopy设置为sbText的空间地址。他们的差距就不多说了,当访问频率不是很高的时候,性能是体现不出来的(我也只是猜测,没做过测试)。

       

          下面用图形来表达下我的理解:

      

  • 相关阅读:
    找零问题-完全背包
    可同时在nodejs和浏览器端使用的websocket
    C++ vector 比较大小
    npm ERR! Unexpected token in JSON at position 0 while parsing near '<HTML> 解决办法
    C/C++宏定义中#与##区别
    解析日志工具。
    3
    2
    dssfsfsfs
    android获取USB设备的名称
  • 原文地址:https://www.cnblogs.com/paulxie/p/2044153.html
Copyright © 2011-2022 走看看