string s1 = "hi";
string s2 = "hi";
bool x = (s1 == s2);
Console.WriteLine(bool.Parse(""+x)); //printed as true and my point of interest
x = s1.Equals(s2);
Console.WriteLine(bool.Parse("" + x));//printed as true
s1 = s2;
x = (s1 == s2);
Console.WriteLine(bool.Parse("" + x));//printed as true
x = s1.Equals(s2);
Console.WriteLine(bool.Parse("" + x));//printed as true
Since s1==s2
compares references, it shoukd be returned as false. But i get the output as true. I observe this in case of strings alone. When this is done on objects of other classes, it rightly evaluates to false. Why is this exceptional behaviour observed in strings?