Well,你对C#里的引用类型和值类型还没有彻底搞懂。
String类型和字符串字面量本质上是一样的,都是引用类型。
String i=... // 在托管堆开辟了一块内存(假定地址为0x13EABC)
String j=i; // 此时j和i同时指向了托管堆的某块内存的地址
i="101"; // i重新指向了托管堆值为101的某块内存地址(假定地址为0x13EF5),j仍然不变。理解这点很重要
j="10001"; // j重新指向了托管堆值为10001的某块内存地址(假定地址为0x13EFF)
// 至此,托管堆内存地址为0x13EABC再也没有栈区的引用,它很快将被GC回收,具体何时回收由.NET底层机制自动执行。
So,当你输出i,j的值肯定是不同的。