知识大全 对 String 的几个错误认识[2]

Posted 操作

篇首语:书到用时方恨少,事非经过不知难。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 对 String 的几个错误认识[2]相关的知识,希望对你有一定的参考价值。

对 String 的几个错误认识[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  从这段源码中我们看到 net 在字符串等号操作符中调用了 System String::Equals 这个静态方法来比较 这个静态方法的代码如下

     // Determines whether o Strings match

        public static bool Equals(String a String b)

            if ((Object)a==(Object)b)

                return true;

           

 

            if ((Object)a==null || (Object)b==null)

                return false;

           

 

            return EqualsHelper(a b);

       

  从这个代码我们可以看出两个string 类型在进行==操作符比较时先比较引用是否相等 如果不等会调用EqualsHelper比较值是否相等 这也就是我们看到用==操作符比较两个引用不同但值相同的string时得到true的原因  

  一点建议

  从时间角度考虑性能 如果字符串是驻留的 那么用==操作符比较起来 在被比较的两个字符串相等的情况下将会非常快 但从空间效率考虑

  如果对所有字符串都驻留 势必导致大量内存无法被释放 折中一下 可以在构造字符串后进行如下操作 这样构造出来的字符串如果

  已经驻留 则使用驻留后的字符串引用 否则使用原来引用 这样除了可以提高比较的效率还可以减少内存的开销 因为该字符串之前已经被驻留过了

  我们没有必要再重新申请其它的内存来存储相同的字符串 当然调用TryIntern本身会有一些性能损失 所以还要视具体情况使用 如果该字符串构造出来后

  被频繁用于比较 则在第一次构造时使用TryIntern损失一些性能是值得的 否则就不值得 建议直接使用构造出来的字符串

string s = MyTest ;string s = new StringBuilder() Append( My ) Append( Test ) ToString();

s = TryIntern(s );

public static string TryIntern(string str)internStr = string IsInterned(str);

return internStr == null? str: internStr;

cha138/Article/program/net/201311/15386

相关参考