See this code:
object x = \"mehdi emrani\";
string y = \"mehdi emrani\";
Console.WriteLine(y == x);
that returns true.
In the first case, .NET performs string constant optimization and allocates only one String instance. Both x and y points to same object (both the references are equal).
But in the second case x and y are pointing to different String instances. Adding "ermani" to y creates a third string object.
"==" operator basically returns true if operands on both sides refer to same object. In the first case x and y refer to same object and in the seconds case x & y refer different objects.