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

时间:2015-05-21 04:43:59

标签: c#

修改

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

我正在调查c#中的==运算符。令我惊讶的是,它给出了以下代码的相同结果(与JAVA相反)。但根据this==用于参考检查,我应该看到我的代码有不同的结果,那么为什么我看到它们的结果相同?难道我不能看到我的代码有不同的结果吗?是因为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());

输出

  

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

注意:我理解差异参考&价值检查。我使用ReferenceEquals尝试了结果,并向我显示了预期结果。

2 个答案:

答案 0 :(得分:7)

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

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

仅供参考,在字符串!=中,运算符也被开发以检查字符串内容不等式。

答案 1 :(得分:1)

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