1、背景spa
1. 如下代碼的HashCode是否相同,它們是不是同個對象;對象
var A = "ab" + "c";字符串
var B = "abc";編譯器
2. 如下代碼的HashCode是否相同,他們是不是同個對象: string
var A = Console.ReadLine(); //輸入"abc"編譯
var B = Console.ReadLine(); //輸入"abc"引用
3. 如下代碼的HashCode是否相同,他們是不是同個對象: 字符
var A = Console.ReadLine(); //輸入"abc"實例化
var B = Console.ReadLine(); //輸入"abc"ab
var A = string.Intern(B);
2、結果:
// 由於String類型對GetHashCode通過重寫,因此如下的全部字符串的HashCode相同;
1. A跟B的HashCode相同,它們爲同一對象; // 由於string在編譯時,編譯器會把相同的string壓入字符串"駐留池",因此在編譯後A跟B都指向「駐留池」中同一個對象
2. A跟B的HashCode相同,它們爲不一樣對象; // 由於A跟B都是在系統運行時輸入的(也就是運行時實例化),因此他們是兩個不一樣的對象;
3. A跟B的HashCode相同,他們爲同一對象; // 由於A跟B都是系統運行時輸入的,但額外執行了一步(Intern(B)),這裏引用微軟的一句話「若是暫存了B,則返回系統對其的引用;不然返回對值爲 B 的字符串的新引用。」,因此判斷結果認爲A跟B是同樣的;