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