为什么会相等呢

beibei787878 2013-10-31 10:34:54
加精
string msg1 = "abc";
string msg2 = "abc";
if (object.ReferenceEquals(msg1, msg2))
{
string he = "yes";
}
...全文
2225 51 打赏 收藏 转发到动态 举报
写回复
用AI写文章
51 条回复
切换为时间正序
请发表友善的回复…
发表回复
草帽小子灬 2013-11-05
  • 打赏
  • 举报
回复
这是个享元模式。
mbugaifc 2013-11-05
  • 打赏
  • 举报
回复
blueink_200451 2013-11-05
  • 打赏
  • 举报
回复
支持支持支持 支持支持支持
yc092412 2013-11-04
  • 打赏
  • 举报
回复
支持支持支持
ask14k 2013-11-04
  • 打赏
  • 举报
回复

void hehe()
{
   int a;//hehe
}
mbugaifc 2013-11-03
  • 打赏
  • 举报
回复
走着的方头狮 2013-11-03
  • 打赏
  • 举报
回复
懂了懂了懂了
名字到底多长 2013-11-02
  • 打赏
  • 举报
回复
引用 24 楼 clark523 的回复:
一个基础知识而已。 每本.net的基础书都会提到的。 这也是为什么我们在频繁使用字符串组合的时候应该使用StringBuilder而不是用string的根本原因。 会在拼接过程中产生大量的冗余的字符串碎片。
java中其实是一样的。拼接的时候用StringBuilder优化的。可以看生成的字节码。
lxliuxin 2013-11-02
  • 打赏
  • 举报
回复
msg1和msg2这两个引用都指向字符串常量"abc"
yuming654321 2013-11-02
  • 打赏
  • 举报
回复
是这样的MEICUO
发幅度飞 2013-11-02
  • 打赏
  • 举报
回复
s1087749 2013-11-01
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/system.object.referenceequals.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-1 总之,如果字符串内容完全相同,string的变量就会指向同一个地址。所以object.ReferenceEquals方法是相等的,或者说msg1==msg2.
zhou_qun31655 2013-11-01
  • 打赏
  • 举报
回复
xiejin90314 2013-11-01
  • 打赏
  • 举报
回复

  string msg1 = "abc";
  string msg2 = new String("abc");
  if (object.ReferenceEquals(msg1, msg2))
  {
        string he = "yes";
  }
   else
  { 
        string he = "NO";
  }       
这样就不相等了。。楼主自己看看基础吧
blackkettle 2013-11-01
  • 打赏
  • 举报
回复
引用 16 楼 zxz414644665 的回复:
在C#中,如果你写成
string msg1 = "abc";
,那么在编译期间,就会转化为如下IL指令并存储到metadata中去
LdStr "abc"
,那么此时,如果你再定义一个
string msg2 = "abc";
,编译器就会识别到"abc"已经存在了,就会调用这条IL指令将这个引用msg1指向msg2,当然你用new的方式的话那肯定就是实例化新的实例了,这个就不起效果了。 另外,字符串在做加减等操作时,因为string是不变的引用类型,所以等于说只要你对string做了一些操作,那么一般情况下都回生成新的实例。 关于string池,string有一个方法
string.Intrrn(string str)
,这方法就会在string池里面找到与str值相等的string引用并返回,如果你用了很多这样的方法,可以说是节省了内存空间,但是用多了也不好,因为它会一直占用着不会释放知道CLR终止,也就是说,它会一直存在知道你的程序终止。
+1
  • 打赏
  • 举报
回复
string是个特殊的类型 有一点就是允许字符串常量直接对他赋值 msg1和msg2这两个引用都指向字符串常量"abc"
bianHao-binn 2013-11-01
  • 打赏
  • 举报
回复
长知识了
alishco 2013-11-01
  • 打赏
  • 举报
回复
不懂,好像学过的
llllllllg 2013-11-01
  • 打赏
  • 举报
回复
引用同一个地方
自由之翼Online 2013-10-31
  • 打赏
  • 举报
回复
这是JAVA中的常量池这个概念在作用,所以相等
加载更多回复(25)

110,500

社区成员

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

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

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