I know there are a lot of ways to compare VALUE and REFERENCES in C#, but I'm still a bit confused about what type performs what when you try to compare either VALUE or REFERENCE.
String examples:
string str = "hello";
string str2 = "hello";
if (str == str2)
{
Console.WriteLine("Something");
} // Is this a comparison of value?
if (str.Equals(str2))
{
Console.WriteLine("Something");
} // Is this a comparison of value?
string.ReferenceEquals(str, str2); // Comparison of reference (True)
Console.WriteLine((object)str1 == (object)str2); // Comparison of reference (True)
Equals
and ==
will compare by reference by default if they're not overriden / overloaded in a subclass. ReferenceEquals
will always compare by reference.
Strings are a confusing data type to use for experimenting with this, because they overload ==
to implement value equality; also, since they're immutable, C# will generally reuse the same instance for the same literal string. In your code, str
and str2
will be the same object.