【发布时间】:2019-04-30 06:34:22
【问题描述】:
我是 C# 字符串的新手,我对此感到困惑
Object.referenceEquals
我正在阅读一些文章,上面写着ReferenceEquals 检查它是否在程序中是否相同实例我正在检查object.ReferenceEquals(s1, s4) 即使它们指向相同的数据,为什么它会出现错误?
string s1 = "akhil";
string s2 = "akhil";
Console.WriteLine(object.ReferenceEquals(s1, s2)); //true
s2 = "akhil jain";
Console.WriteLine(object.ReferenceEquals(s1, s2)); //false
//Console.WriteLine(s1 == s2);
//Console.WriteLine(s1.Equals(s2));
string s3 = "akhil";
//1".Substring(0, 5);
Console.WriteLine(s3+" " +s1);
Console.WriteLine(object.ReferenceEquals(s1,s3)); //true
string s4 = "akhil1".Substring(0, 5);
Console.WriteLine(object.ReferenceEquals(s1, s4)); //confusion false why as s4 data is same as s1
【问题讨论】:
-
它返回 akhil @Loocid
-
您有两个字符串对象,它们都具有相同的数据,但它们仍然是独立的对象 - 这就是
ReferenceEquals返回 false 的原因。Substring不会遍历内存来尝试查找具有相同内容的其他字符串对象。 -
你的声明第一个 object.ReferenceEquals(s1, s2) 应该是假的,那为什么它是真的?
-
因为 s1 和 s2 引用 same 对象,这是由于字符串文字的工作方式。每次在一个程序中使用 C# 中的相同字符串字面量时,最终都会引用同一个对象。当您调用 Substring 时,情况不是。
标签: c# string substring equals