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
Because strings are immutable and the runtime may choose to put any two strings with the same content together into the same reference. So reference-comparing strings doesn't really make any sense.