字符串內(nèi)存駐留機(jī)制詳解示例
//字符串的內(nèi)存駐留機(jī)制
public static void Test()
{
//當(dāng)有多個(gè)字符串變量包含了同樣的字符串實(shí)際值時(shí),
//CLR可能不會(huì)為它們重復(fù)地分配內(nèi)存,而是讓它們統(tǒng)統(tǒng)指向同一個(gè)字符串對象實(shí)例。
String s1 = "Hello";
String s2 = "Hello";
bool same = (object)s1 == (object)s2;//比較一下s1和s2是否是同一個(gè)引用
Console.WriteLine(same); //這個(gè)地方為true:表示同一個(gè)引用 沒有開辟新的內(nèi)存空間
/*
* 我們知道,String類有很多特別的地方,其中之一就是它是“不會(huì)改變的”(immutable)。
* 這說明在我們每次對一個(gè)String對象進(jìn)行操作時(shí)(比如說使用Trim,Replace等方法),
* 并不是真的對這個(gè)String對象的實(shí)例進(jìn)行修改,而是返回一個(gè)新的String對象實(shí)例作為操作執(zhí)行的結(jié)果。
* String對象的實(shí)例一經(jīng)生成,到死都不會(huì)被改變了!
*/
/*關(guān)于駐留池:它是維護(hù)哪些字面量的字符串,但是不會(huì)維護(hù)下面的這種類型*/
StringBuilder sb = new StringBuilder();
sb.Append("Hel").Append("lo");
String s3 = "Hello";
String s4 = sb.ToString(); //雖然值相同但并不是同一個(gè)引用
bool same2 = ((object)s4 == (object)s3);
Console.WriteLine(same2);
/*讓編程者能夠強(qiáng)制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);
}
相關(guān)文章
C# Socket連接請求超時(shí)機(jī)制實(shí)現(xiàn)代碼分享
這篇文章主要介紹了C# Socket連接請求超時(shí)機(jī)制實(shí)現(xiàn),下面提供代碼分享,大家可以參考使用2013-12-12
C# .NET及Mono跨平臺(tái)實(shí)現(xiàn)原理解析
這篇文章主要介紹了C# .NET及Mono、跨平臺(tái)實(shí)現(xiàn)原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05
在Winform框架界面中改變并存儲(chǔ)界面皮膚樣式的方法
下面小編就為大家分享一篇在Winform框架界面中改變并存儲(chǔ)界面皮膚樣式的方法,具有很好的參考價(jià)值,希望對大家有所幫助2017-11-11
Unity實(shí)現(xiàn)蘋果手機(jī)Taptic震動(dòng)
這篇文章主要介紹了Unity實(shí)現(xiàn)蘋果手機(jī)Taptic震動(dòng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-10-10
C#模擬實(shí)現(xiàn)抽獎(jiǎng)小程序的示例代碼
這篇文章主要介紹了通過C#模擬實(shí)現(xiàn)一個(gè)簡單的抽獎(jiǎng)小程序,文中的示例代碼講解詳細(xì),對我們了解C#有一定的幫助,需要的可以參考一下2021-12-12

