У меня есть следующий кодConfused о работе равенства в C#
CASE 1
string string1 = "pankaj";
string string2 = "pankaj";
Console.WriteLine(string1 == string2); // output TRUE
CASE 2
object obj1 = "pankaj";
object obj2 = "pankaj";
Console.WriteLine(obj1==obj2); // Output TRUE
CASE 3
object againObject1 = 2;
object againObject2 = 2;
Console.WriteLine(againObject1==againObject2); // Output FALSE
в виде строки и объекта является типом ссылки и для ссылочного типа я узнал, что операция равенства проверяет, если они имеют один и тот же адрес, в двух указанных выше случае почему его сравнивая значение вместо ссылок.
Чем более запутанным является поведение оператора равенства для типа объекта в случае 2, а в случае 3 для строкового типа он вычисляет true, а для целых - возвращает false.
Из-за оптимизаторов компилятора существует только одна строка, созданная «Pankaj». В случае целых чисел будут созданы два разных объекта. Перейдите по следующему [link] (http://stackoverflow.com/questions/4286614/c-sharp-do-string-literals-get-optimised-by-the-compiler) http://stackoverflow.com/questions/ 4286614/c-sharp-do-string-literals-get-optimized-by-the-compiler – Srikanth
Я думаю, что это потому, что строковые литералы интернированы, поэтому существует только один экземпляр «pankaj». 'Console.WriteLine (object.ReferenceEquals (obj1, obj2));' также вернет true для случая 2. –
Возможный дубликат [Попытка понять == оператор с объектами] (http://stackoverflow.com/questions/25396926/trying-to-understand-operator-with-objects) –