关于 ReferenceEquals 方法的探讨

Simonzy 2009-07-21 02:00:54
我想大家都知道,在C#中ReferenceEquals是判断两个对象的引用是否相等的一个方法。
public static bool ReferenceEquals(
Object objA,
Object objB
)

如果 objA 是与 objB 相同的实例,或者如果二者都为空引用,则为 true;否则为 false。

那么,请看如下的两中情况:
1.
string str1 = "CCC";
string str2 = "CCC";

object.ReferenceEquals(str1, str2) 返回的是 True
2.
string str3 = new string('C', 3);
string str4 = new string('C', 3);

object.ReferenceEquals(str3, str4) 返回的是 False

他们的结果是截然不同的,我想这是与是否使用new的关键字有关系。
不知道有谁研究过其中的本质区别 ?共同探讨探讨
...全文
68 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_stone 2009-07-21
  • 打赏
  • 举报
回复
实例和引用是2个不同的概念。
object.ReferenceEquals 比较的是实例是否相同。
引用是存在堆栈上,实例是存在堆上。

第一个例子中,str1 和str2 都是“CCC”的一个引用,他们的实例相同为"CCC“,因此返回true;
第二各例子中,str1 和str2 是通过new 重新创建的2个实例,他们的内存地址都不一样的。
地址都不一样,实例也应该不一样,故返回的false;

个人理解。
guilipan 2009-07-21
  • 打赏
  • 举报
回复
String对于声明的相同的字符串在堆上只保留一个Copy,所以str1与str2将会指向相同的Reference,

new 关键字会在堆中分配新的内存,str3不过相当与一个指针,指向堆中这个分配的数据,str4同理,因此他们指向不同的对象
NealXX 2009-07-21
  • 打赏
  • 举报
回复
有意思

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧