#c_sharp #console #if
static bool Compare0() { return new byte() == new byte(); } static bool Compare1() { return new byte[0] == new byte[0]; } static void Main() { Console.WriteLine(Compare0()); Console.WriteLine(Compare1()); Console.ReadKey(); } Почему Compare0() возвращает True, а Compare1() - False?
Ответы
Ответ 1
Конструкция new byte() создает экземпляр типа byte, проинициализированный нулем. byte -- это структура, а следовательно, это значимый тип. По умолчанию все значимые типы сравниваются по значению. Поскольку два экземпляра проинициализированы одинаковым значением, Compare0() возвращает True. Конструкция new byte[0] создает пустой массив типа byte. Массив -- это ссылочный тип. По умолчанию экземпляры ссылочных типов равны, только если их ссылки равны, т.е. экземпляры указывают на один и тот же объект. Поскольку два экземпляра массива -- это два разных объекта в памяти, Compare1() возвращает False. Подробнее о значимых и ссылочных типах можно почитать в этом ответе.
Комментариев нет:
Отправить комментарий