I know it is special case but why == between strings returns if their value equals and not when their reference equals. Does it have something to do with overlloading operat
The equality operators (== and !=) are defined to compare the values of string objects, not references.
==
!=
There was not any situation in which I had to compare the references but if you want to do so then you can use:
object.ReferenceEquals().