new String()不会';t在c#中创建新的引用对象

本文关键字:创建 对象 引用 String 不会 new | 更新日期: 2023-09-27 17:50:21

编辑:

为什么这个问题不重复我不是在问.Equals()==之间的区别。我在问==实际上是如何工作的。我的意思是,当我使用不同的方法创建字符串时,我应该看到不同的结果。但我看到了同样的结果。

我正在研究c#中的==运算符。令我惊讶的是,它对以下代码给出了相同的结果(与JAVA相反(。但根据这一点,==是用于参考检查的,我应该看到我的代码的不同结果,那么为什么我看到他们两个的相同结果呢?难道我不应该为我的代码块看到不同的结果吗?是因为c#中的new String()没有生成新的引用吗?

 String s = "abc";
 String s1 = "abc";
 Console.WriteLine("Expected output: True, Actual output: " + (s1==s).ToString());

输出

预期输出:True,实际输出:True

另一个代码检查

    String s2 = new String("abc".ToCharArray());
    String s3 = new String("abc".ToCharArray());
    Console.WriteLine("Expected output: False, Actual output: " + (s2 == s3).ToString());

输出

预期输出:错误,实际输出:

注意:我理解差异参考&值检查。我已经尝试了ReferenceEquals的结果,它向我展示了预期的结果。

new String()不会';t在c#中创建新的引用对象

通常,对于引用类型,==运算符会检查引用是否相等。

String也是一种引用类型,但在String类中,==运算符被重载以检查内容相等性,而不是引用相等性。

上面写着,我引用

Determines whether two specified strings have the same value.

在此处阅读https://msdn.microsoft.com/en-us/library/system.string.op_equality(v=vs.110(.aspx

仅供参考,在字符串!=中,还加载了运算符来检查字符串内容的不相等性。

在c#运算符==中,字符串比较值,而不是引用。