手机
当前位置:查字典教程网 >编程开发 >C#教程 >字符串内存驻留机制详解示例
字符串内存驻留机制详解示例
摘要:复制代码代码如下://字符串的内存驻留机制publicstaticvoidTest(){//当有多个字符串变量包含了同样的字符串实际值时,/...

复制代码 代码如下:

//字符串的内存驻留机制

public static void Test()

{

//当有多个字符串变量包含了同样的字符串实际值时,

//CLR可能不会为它们重复地分配内存,而是让它们统统指向同一个字符串对象实例。

String s1 = "Hello";

String s2 = "Hello";

bool same = (object)s1 == (object)s2;//比较一下s1和s2是否是同一个引用

Console.WriteLine(same); //这个地方为true:表示同一个引用 没有开辟新的内存空间

/*

* 我们知道,String类有很多特别的地方,其中之一就是它是“不会改变的”(immutable)。

* 这说明在我们每次对一个String对象进行操作时(比如说使用Trim,Replace等方法),

* 并不是真的对这个String对象的实例进行修改,而是返回一个新的String对象实例作为操作执行的结果。

* String对象的实例一经生成,到死都不会被改变了!

*/

/*关于驻留池:它是维护哪些字面量的字符串,但是不会维护下面的这种类型*/

StringBuilder sb = new StringBuilder();

sb.Append("Hel").Append("lo");

String s3 = "Hello";

String s4 = sb.ToString(); //虽然值相同但并不是同一个引用

bool same2 = ((object)s4 == (object)s3);

Console.WriteLine(same2);

/*让编程者能够强制CLR检查驻留池;查看是否有相同的字符串*/

StringBuilder sb2 = new StringBuilder();

sb2.Append("He").Append("llo");

string s5 = "Hello";

string s6 = String.Intern(sb2.ToString());

bool same3 = (object)s5 == (object)s6;

Console.WriteLine(same3);

}

【字符串内存驻留机制详解示例】相关文章:

C#: 引用变量与数值变量的区别

C# DES加密算法中向量的作用详细解析

C#异常处理详解

C#垃圾回收机制的详细介绍

C#.NET字符串比较中忽略符号的方法

计算字符串和文件MD5值的小例子

C# Split分隔字符串的应用(C#、split、分隔、字符串)

深入C#字符串和享元(Flyweight)模式的使用分析

C# 16进制与字符串、字节数组之间的转换

c#对字符串操作的技巧小结

精品推荐
分类导航