关于string的对象引用
2016-03-21 13:43
309 查看
什么都不说了, 一切都在代码里:
1 string a1 = "aaa"; // 在堆中分配"aaa"
2 string a2 = "aaa"; // 堆中已有"aaa", 则不再给"aaa"分配新空间,a2指向a1的地址
3 string a3 = new string("aaa".ToCharArray()); // new产生新的对象,分配新的空间
4
5 Console.WriteLine(object.ReferenceEquals(a1, "aaa")); //Ture
6 Console.WriteLine(object.ReferenceEquals(a1, a2)); //True
7 Console.WriteLine(object.ReferenceEquals(a1, a3)); //False
8
9 string b1 = "bbb";
string c1 = "aaabbb"; // 定义"aaabbb"
string c2 = "aaa" + "bbb"; // "aaa"和"bbb"都是常量, 合成为"aaabbb"指向c1
string c3 = a1 + "bbb"; // a1是变量, 则给c3分配新的空间
string c4 = a1 + b1; // 同上, c4分配新的空间
string c5 = a1 + b1; // 同上, c5分配新的空间
Console.WriteLine(object.ReferenceEquals(c1, c2)); //True
Console.WriteLine(object.ReferenceEquals(c1, c3)); //False
Console.WriteLine(object.ReferenceEquals(c1, c4)); //False
Console.WriteLine(object.ReferenceEquals(c3, c4)); //False
Console.WriteLine(object.ReferenceEquals(c5, c4)); //False
1 string a1 = "aaa"; // 在堆中分配"aaa"
2 string a2 = "aaa"; // 堆中已有"aaa", 则不再给"aaa"分配新空间,a2指向a1的地址
3 string a3 = new string("aaa".ToCharArray()); // new产生新的对象,分配新的空间
4
5 Console.WriteLine(object.ReferenceEquals(a1, "aaa")); //Ture
6 Console.WriteLine(object.ReferenceEquals(a1, a2)); //True
7 Console.WriteLine(object.ReferenceEquals(a1, a3)); //False
8
9 string b1 = "bbb";
string c1 = "aaabbb"; // 定义"aaabbb"
string c2 = "aaa" + "bbb"; // "aaa"和"bbb"都是常量, 合成为"aaabbb"指向c1
string c3 = a1 + "bbb"; // a1是变量, 则给c3分配新的空间
string c4 = a1 + b1; // 同上, c4分配新的空间
string c5 = a1 + b1; // 同上, c5分配新的空间
Console.WriteLine(object.ReferenceEquals(c1, c2)); //True
Console.WriteLine(object.ReferenceEquals(c1, c3)); //False
Console.WriteLine(object.ReferenceEquals(c1, c4)); //False
Console.WriteLine(object.ReferenceEquals(c3, c4)); //False
Console.WriteLine(object.ReferenceEquals(c5, c4)); //False
相关文章推荐
- Sublime Text3使用总结
- 如何让浏览器直接输出HTML代码而不解析
- web service初识和问题(一)
- CentOS 6.5下配置LVM-操作过程-for-2个3T盘
- Spring MVC实现用户登录页面
- Android之ContentProvider与ContentResolver
- matlab简单应用
- Git 本地安装
- 腾讯 Bugly for Xamarin Android 的插件
- Runnable、Callable、Executor、Future、FutureTask关系解读(转)
- 《java作业》
- 第三周(JAVA编写的 wordcount)
- 根据给出的语料库,训练n-gram模型。根据训练出的模型,判断测试集中每个句子是不是语法合法的句子
- Mapped Statements collection does not contain value for
- iOS 微信支付
- docker数据管理2
- 在linux下解压常见软件,并添加环境变量;定制linux系统服务
- docker数据管理2
- docker数据管理2
- 【解决】Element type "typename" must be followed by either attribute specifications, ">" or "/>".