关于string的对象引用
什么都不说了, 一切都在代码里:
1 string a1 = "aaa"; // 在堆中分配"aaa" 2 string a2 = "aaa"; // 堆中已有"aaa", 则不再给"aaa"分配新空间,a2指向a1的地址 3 string a3 = new string("aaa".ToCharArray()); // new产生新的对象,分配新的空间 4 5 Console.WriteLine(object.ReferenceEquals(a1, "aaa")); //Ture 6 Console.WriteLine(object.ReferenceEquals(a1, a2)); //True 7 Console.WriteLine(object.ReferenceEquals(a1, a3)); //False 8 9 string b1 = "bbb"; 10 11 string c1 = "aaabbb"; // 定义"aaabbb" 12 string c2 = "aaa" + "bbb"; // "aaa"和"bbb"都是常量, 合成为"aaabbb"指向c1 13 string c3 = a1 + "bbb"; // a1是变量, 则给c3分配新的空间 14 string c4 = a1 + b1; // 同上, c4分配新的空间 15 string c5 = a1 + b1; // 同上, c5分配新的空间 16 17 Console.WriteLine(object.ReferenceEquals(c1, c2)); //True 18 Console.WriteLine(object.ReferenceEquals(c1, c3)); //False 19 Console.WriteLine(object.ReferenceEquals(c1, c4)); //False 20 Console.WriteLine(object.ReferenceEquals(c3, c4)); //False 21 Console.WriteLine(object.ReferenceEquals(c5, c4)); //False |
|