Two different "strings" are the same object instance?
c#, equality, reference, string
Solution
Literal string objects are coalesced into single instances by the compiler. This is actually required by the specification:
Each string literal does not necessarily result in a new string instance. When two or more string literals that are equivalent according to the string equality operator (Section 7.9.7) appear in the same assembly, these string literals refer to the same string instance.
Problem
The code is pretty self explanatory. I expected when I made `a1` and `b1` that I was creating two different string instances that contain the same text. So I figure `a1 == b1` would be true but `object.ReferenceEquals(a1,b1)` would be false, but it isn't. Why? ``` //make two seemingly different string instances string a1 = "test"; string b1 = "test"; Console.WriteLine(object.ReferenceEquals(a1, b1)); // prints True. why? //explicitly "recreating" b2 string a2 = "test"; string b2 = "tes"; b2 += "t"; Console.WriteLine(object.ReferenceEquals(a2, b2)); // prints False //explicitly using new string constructor string a3 = new string("test".ToCharArray()); string b3 = new string("test".ToCharArray()); Console.WriteLine(object.ReferenceEquals(a3, b3)); // prints False ```