The second ReferenceEquals call returns false. Why isn\'t the string in s4 interned? (I don\'t care about the advantages of StringBuilder over string concatenation.)
Strings are immutable. This means their contents can't be changed.
When you do s4 += "m"; internally, the CLR copies the string to another location in memory which contains the original string and the appended part.
s4 += "m";
See MSDN string reference.