[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考
[2] [你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考
[3] [你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考
系列文章導航:
[你必須知道的.NET] 第四回:后來居上:class和struct
[你必須知道的.NET] 第五回:深入淺出關鍵字---把new說透
[你必須知道的.NET] 第六回:深入淺出關鍵字---base和this
[你必須知道的.NET] 第七回:品味類型---從通用類型系統開始
[你必須知道的.NET] 第八回:品味類型---值類型與引用類型(上)-內存有理
[你必須知道的.NET] 第九回:品味類型---值類型與引用類型(中)-規則無邊
[你必須知道的.NET] 第十回:品味類型---值類型與引用類型(下)-應用征途
[你必須知道的.NET] 第十一回:參數之惑---傳遞的藝術(上)
[你必須知道的.NET] 第十二回:參數之惑---傳遞的藝術(下)
[你必須知道的.NET] 第十三回:從Hello, world開始認識IL
[你必須知道的.NET] 第十四回:認識IL代碼---從開始到現在
[你必須知道的.NET] 第十六回:深入淺出關鍵字---using全接觸
[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考
[你必須知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二
[你必須知道的.NET]第二十二回:字符串駐留(上)---帶著問題思考
![]() |
走鋼絲的人,在刺激中體驗快感。帶著問題思考,在問題上迸發火花。 或者給問題以答案,或者給答案以問題,你可能永遠無法看清全部,但是總能從一點突破很多。事實的關鍵就在于面對問題,我該如何思考? String Interning(字符串駐留)就是這樣一個值得思考的話題,帶著問題思考,我們至少要理清以下幾個問題:
帶著幾個問號,你必須知道的.NET,繼續更多體驗。 |
1 帶著問題?
帶著問題思考,是技術探索的最佳實踐, 每當我收到很多朋友來函探討技術的問題,總能給我很多的技術思索和驚喜,今天我們的話題就是由一個朋友的來函開始的,你可以通過鏈接打開KiMoGiGi在To 王濤 的問題一文中精彩絕倫的思考和探討,帶著他的提問,引著我的思考,完成本文對string的一點點探討。
首先,本文也無一例外的從8個測試開始,也希望讀者能沿著這幾個簡單的示例來思考答案。如果對此包含熱情,不妨可以試試,你開始了嗎?
// Release : code01, 2008/08/20
// Author : Anytao, http://www.anytao.com
static void Main()
{
string s1 = "abc";
Console.WriteLine(string.IsInterned(s1) ?? "null");
}
這是個簡單的例題,可以很快給出答案。
// Release : code02, 2008/08/20
// Author : Anytao, http://www.anytao.com
static void Main()
{
string s1 = "ab";
s1 += "c";
Console.WriteLine(string.IsInterned(s1) ?? "null");
}
稍加修改,這回的答案又該如何分析,我們繼續。
// Release : code03, 2008/08/20
// Author : Anytao, http://www.anytao.com
static void Main()
{
string s1 = "abc";
string s2 = "ab";
s2 += "c";
string s3 = "ab";
Console.WriteLine(string.IsInterned(s1) ?? "null");
Console.WriteLine(string.IsInterned(s2) ?? "null");
Console.WriteLine(string.IsInterned(s3) ?? "null");
}
如果上述執行過程,你能很快給出答案,那么恭喜了,第一關看來不是那么費勁,我們接著思考,繼續第二關:
// Release : code04, 2008/08/20
// Author : Anytao, http://www.anytao.com
static void Main()
{
string s1 = "abc";
string s2 = "ab";
string s3 = s2 + "c";
Console.WriteLine(string.IsInterned(s3) ?? "null");
}
還有一個,我們繼續
// Release : code05, 2008/08/20
// Author : Anytao, http://www.anytao.com
static void Main()
{
string s2 = "ab";
s2 += "c";
Console.WriteLine(string.IsInterned(s2) ?? "null");
string s1 = "abc";
}
你的答案怎么是?我們還是接著迎接挑戰:
// Release : code06, 2008/08/20
// Author : Anytao, http://www.anytao.com
static void Main()
{
string s2 = "ab";
s2 += "c";
Console.WriteLine(string.IsInterned(s2) ?? "null");
string s1 = GetStr();
}
private static string GetStr()
{
return "abc";
}
這是第二關了,你的思考肯定還在繼續,我們第三關也呼之欲出:
// Release : code07, 2008/08/20
// Author : Anytao, http://www.anytao.com
public const string s1 = "abc";
static void Main()
{
string s2 = "ab";
s2 += "c";
Console.WriteLine(string.IsInterned(s2) ?? "null");
}
最后一個,沖出藩籬:
// Release : code08, 2008/08/20
// Author : Anytao, http://www.anytao.com
public static string s1 = "abc";
static void Main()
{
string s2 = "ab";
s2 += "c";
Console.WriteLine(string.IsInterned(s2) ?? "null");
}
過關斬將,三輪PK,是英雄比高。不管怎樣,你的答案和思考,肯定會讓大家對string刮目相看,是否和你一直以來的認識統一呢?在此感謝KiMoGiGi 給我的啟示。有了問題,我們更需要的是思考、探討和反思。