Страницы

Поиск по вопросам

среда, 10 апреля 2019 г.

Почему сравнения возвращают различные результаты?

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?


Ответ

Конструкция new byte() создает экземпляр типа byte, проинициализированный нулем. byte -- это структура, а следовательно, это значимый тип. По умолчанию все значимые типы сравниваются по значению. Поскольку два экземпляра проинициализированы одинаковым значением, Compare0() возвращает True
Конструкция new byte[0] создает пустой массив типа byte. Массив -- это ссылочный тип. По умолчанию экземпляры ссылочных типов равны, только если их ссылки равны, т.е. экземпляры указывают на один и тот же объект. Поскольку два экземпляра массива -- это два разных объекта в памяти, Compare1() возвращает False
Подробнее о значимых и ссылочных типах можно почитать в этом ответе

Комментариев нет:

Отправить комментарий