Страницы

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

пятница, 7 февраля 2020 г.

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

#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. Подробнее о значимых и ссылочных типах можно почитать в этом ответе.

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

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