您的位置:知识库 » .NET技术

[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

作者: Anytao  来源: 博客园  发布时间: 2008-10-13 11:10  阅读: 4053 次  推荐: 0   原文链接   [收藏]  

系列文章导航:

[你必须知道的.NET] 开篇有益

[你必须知道的.NET] 第一回:恩怨情仇:is和as

[你必须知道的.NET] 第二回:对抽象编程:接口和抽象类

[你必须知道的.NET] 第三回:历史纠葛:特性和属性

[你必须知道的.NET] 第四回:后来居上:class和struct

[你必须知道的.NET] 第五回:深入浅出关键字---把new说透

[你必须知道的.NET] 第六回:深入浅出关键字---base和this

[你必须知道的.NET] 第七回:品味类型---从通用类型系统开始

[你必须知道的.NET] 第八回:品味类型---值类型与引用类型(上)-内存有理

[你必须知道的.NET] 第九回:品味类型---值类型与引用类型(中)-规则无边

[你必须知道的.NET] 第十回:品味类型---值类型与引用类型(下)-应用征途

[你必须知道的.NET] 第十一回:参数之惑---传递的艺术(上)

[你必须知道的.NET] 第十二回:参数之惑---传递的艺术(下)

[你必须知道的.NET] 第十三回:从Hello, world开始认识IL

[你必须知道的.NET] 第十四回:认识IL代码---从开始到现在

[你必须知道的.NET] 第十五回:继承本质论

[你必须知道的.NET] 第十六回:深入浅出关键字---using全接触

[你必须知道的.NET] 第十七回:貌合神离:覆写和重载

[你必须知道的.NET] 第十八回:对象创建始末(上)

[你必须知道的.NET] 第十九回:对象创建始末(下)

[你必须知道的.NET]第二十回:学习方法论

[你必须知道的.NET]第二十一回:认识全面的null

[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考

[你必须知道的.NET]第三十二回,深入.NET 4.0之,Tuple一二


[你必须知道的.NET]第二十二回:字符串驻留(上)---带着问题思考


说在,开篇之前

走钢丝的人,在刺激中体验快感。带着问题思考,在问题上迸发火花。

或者给问题以答案,或者给答案以问题,你可能永远无法看清全部,但是总能从一点突破很多。事实的关键就在于面对问题,我该如何思考?

String Interning(字符串驻留)就是这样一个值得思考的话题,带着问题思考,我们至少要理清以下几个问题:

  • 什么是string?
  • 什么是字符串驻留?
  • 字符串驻留的运行机制及执行过程?
  • 字符串驻留的其他问题?

带着几个问号,你必须知道的.NET,继续更多体验。

 

1 带着问题?

带着问题思考,是技术探索的最佳实践, 每当我收到很多朋友来函探讨技术的问题,总能给我很多的技术思索和惊喜,今天我们的话题就是由一个朋友的来函开始的,你可以通过链接打开KiMoGiGiTo 王涛 的问题一文中精彩绝伦的思考和探讨,带着他的提问,引着我的思考,完成本文对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 给我的启示。有了问题,我们更需要的是思考、探讨和反思。

 

0
0

.NET技术热门文章

    .NET技术最新文章

      最新新闻

        热门新闻