c# – String Interning
在下面的代码中,我正在检查对象引用的相等性.
string x = "Some Text"; string y = "Some Other Text"; string z = "Some Text"; Console.WriteLine(object.ReferenceEquals(x,y)); // False Console.WriteLine(object.ReferenceEquals(x,z)); // True Console.WriteLine(object.ReferenceEquals(y,z)); // False y = "Some Text"; Console.WriteLine(object.ReferenceEquals(x,y)); // True Console.WriteLine(object.ReferenceEquals(x,z)); // True 这里: > x和z是指相同的对象;我可以说x是interned,z是用taht版本.嗯,我不知道这个;请纠正我,如果我错了. 我的问题是: > .net使用string interns为我使用的每个字符串? 解决方法
是的,编译器中的常量字符串表达式被处理为ldstr,它保证实习(通过
MSDN):
这不是每个字符串;它是您的代码中的常量字符串表达式.例如: string s = "abc" + "def"; 只有1个字符串表达式 – IL将是“abcdef”上的ldstr(编译器可以计算组合表达式). 这不会伤害表演. 运行时生成的字符串不会自动被自动进行,例如: int i = GetValue(); string s = "abc" + i; 在这里,“abc”被实习,但是“abc8”不是.另请注意: char[] chars = {'a','b','c'}; string s = new string(chars); string t = "abc"; 注意s和t是不同的引用(文字(分配给t))被内联,但新的字符串(分配给s)不是). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |