首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

关于String储存机制的理解

2012-09-29 
关于String存储机制的理解一.字符串存储机制??情况2.?string s1hello//注意:这里s1赋值字符串常量stri

关于String存储机制的理解

一.字符串存储机制

?

?

情况2.

?

string s1="hello"; //注意:这里s1赋值字符串常量

string s2="hello"; //注意:这里s2赋值字符串常量

s1把对象引用复制给了s2,s2指向s1的内存地址。可以说s1和s2是同一个对象,就像

User u2;

User u1=new User();

u2=u1;

如图所示:

关于String储存机制的理解

?

情况4.

?

string s1="hello"; //注意:这里s1赋值字符串常量

string s2="world"; //注意:这里s2赋值字符串常量

s1和s2各分配新的内存空间,如下图所示:

关于String储存机制的理解

?

?

?

三.字符串连接

string s1 ="a";和string s2 = "a" + "b";各进行了几次内存分配?

两段代码所分配内存的次数是一样的。在所有的字符串都是字符串常量时,编译器会在编译时将它们连接成一个字符串。也就是说在碰到诸如"a"+"b"这样的代码时,编译器会自动合并为"ab"

但如果是:string s1 = "hello";strings2 = "helloworld";string s3=s1+"world";就不一样了。注意//这里s3是字符串变量s1和常量"world"连接而成的。

测试1:

Console.WriteLine(Object.ReferenceEquals(s2,s3)) -------False

原因是s3是动态生成的字符串,这样的字符串是不会添加到暂存池中进行维护到的。具体存储在那里要进一步研究??

?

测试2:

Console.WriteLine(Object.ReferenceEquals(s2,s1)) -------False

s1 和 s2 是两个不同的对象(内存地址不同);


测试3:

s3 = String.Intern(s3);

Console.WriteLine(Object.ReferenceEquals(s2,s3)) -------True

Intern 方法使用暂存池来搜索与 s3 值相等的字符串。 如果存在这样的字符串,则返回暂存池中它的引用。 如果不存在,则向暂存池添加对 s3 的引用,然后返回该引用。

由于存在与s3 具有相同值的字符串s2, 将s2 引用赋给 s3。而 s2 和s3 内存引用是相等,因为它们引用同一字符串。

?

?

这篇文章是否让你对字符串有了更深刻的了解了呢,也许里面还有些不足之处,就算是抛砖引玉了吧关于String储存机制的理解,希望大家多多提问和发表意见,洗耳恭听。。。。。关于String储存机制的理解

?

热点排行