本帖最后由 Simonzy 于 2009-07-21 14:02:49 编辑

解决方案 »

  1.   

    String对于声明的相同的字符串在堆上只保留一个Copy,所以str1与str2将会指向相同的Reference,new 关键字会在堆中分配新的内存,str3不过相当与一个指针,指向堆中这个分配的数据,str4同理,因此他们指向不同的对象
      

  2.   

    实例和引用是2个不同的概念。
    object.ReferenceEquals 比较的是实例是否相同。
    引用是存在堆栈上,实例是存在堆上。第一个例子中,str1 和str2 都是“CCC”的一个引用,他们的实例相同为"CCC“,因此返回true;
    第二各例子中,str1 和str2 是通过new 重新创建的2个实例,他们的内存地址都不一样的。
    地址都不一样,实例也应该不一样,故返回的false;个人理解。