для строки, == сравнивает по значению
"Несмотря на то, что строка является ссылочным типом, операторы равенства (== и! =) Определены для сравнения значений строкиобъекты, а не ссылки (7.9.7 Операторы равенства строк). Это делает тестирование на равенство строк более интуитивным. "
Короче говоря, == для строк сравнивает строки по значению, а не по ссылке, потому что спецификация C #говорит, что должен.