加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 你能比较字符串的内存位置而不是内容吗?

发布时间:2020-12-16 01:59:33 所属栏目:百科 来源:网络整理
导读:我在某处读到,如果你的应用程序中有多个相同的字符串,那么实际上只创建了一个字符串,并且所有引用都指向同一个字符串. 在阅读有关锁时,我会看到有关此行为的警告.就像从不锁定字符串一样,因为应用程序中任何地方的任何其他锁都可能锁定在同一个字符串上特别
我在某处读到,如果你的应用程序中有多个相同的字符串,那么实际上只创建了一个字符串,并且所有引用都指向同一个字符串.

在阅读有关锁时,我会看到有关此行为的警告.就像从不锁定字符串一样,因为应用程序中任何地方的任何其他锁都可能锁定在同一个字符串上特别是如果你锁定:

string lockObj = "";
...
{
  lock(lockObj){
  ...
  }
}

所以这让我回到那里只有一个特定字符串的单个副本.所以,如果我想比较两个字符串,有没有办法通过它们的内存位置来做到这一点?喜欢..

public bool areSame(string s1,string s2){
   return &s1 == &s2;
}

谢谢您的帮助!

解决方法

I read somewhere that if you have multiple strings in your application that are the same,that there is really only ever one created and all references really point to the same string.

那是不对的.虽然您可以按照每个唯一字符串使用单个对象的方式排列程序,但.NET不能提供此类保证.确实,C#编译器会使程序中由字符串文字生成的所有字符串对象指向同一个字符串对象.但是,创建具有相同内容的多个字符串对象相当容易.

if I wanted to compare two strings,is there any way to do it by their memory location?

您可以使用Object.ReferenceEquals方法:

public bool areSame(string s1,string s2){
   return Object.ReferenceEquals(s1,s2);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读