我试图更好地理解字符串在c#中的实习并遇到以下情况:
string a ="Hello";
string b ="Hello";
string c = new string(new char[]{'H','e','l','l','o'});
string d = String.Intern(c);
Console.WriteLine(a==b);
Console.WriteLine(c==d);
Console.WriteLine((object)a==(object)b);
Console.WriteLine((object)c==(object)d);
Run Code Online (Sandbox Code Playgroud)
我在控制台中得到以下结果:
真
真
真
假
我的错误是为什么第四个假?
如果您没有创建a( 和b),那么Console.WriteLine((object)c==(object)d);就会产生True。
但是,在执行此操作时,string d = String.Intern(c);字符串"Hello"已存在于字符串实习生池中,因此a对实习生的调用c会找到已存在的字符串"Hello"并将其返回。
因此,如果"Hello"尚未被拘留,那么"Hello"ofc将被拘留,在这种情况下,返回的值d将等于c。
证明:如果你做Console.WriteLine(b==d); it should returnTrue`。(我打赌一定会的。)
| 归档时间: |
|
| 查看次数: |
117 次 |
| 最近记录: |