1.应该是两个值一样的字符串被判断成了同一个对象;
string s1 = "Hello";
Console.WriteLine(s1 == s1); //输出True
Console.WriteLine(s1.Equals(s1)); //输出True。在string类型中Equals方法被重写,用于比较字符串的内容
Console.WriteLine(Object.Equals(s1, s1)); //输出True。同上。
Console.WriteLine(Object.ReferenceEquals(s1, s1)); //输出True。因为两个s1的引用是相同的。
string s2 = "Hello";
Console.WriteLine(s1 == s2); //输出True
Console.WriteLine(s1.Equals(s2)); //输出True。在string类型中Equals方法被重写,用于比较字符串的内容
Console.WriteLine(Object.Equals(s1, s2)); //输出True。同上。
Console.WriteLine(Object.ReferenceEquals(s1, s2)); //输出True。由于值相同,所以s1与s2引用相同的字符串对象。
注意:
- 字符串常量会被存储在一个字符串池(string pool)中,以便重复使用。
- 当创建两个具有相同内容的字符串时,它们实际上会引用相同的字符串对象。