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的空间地址。他们的差距就不多说了,当访问频率不是很高的时候,性能是体现不出来的(我也只是猜测,没做过测试)。
下面用图形来表达下我的理解: