2017-01-21 2 views
-3

Я знаю, что строка является псевдонимом System.String, но я не могу понять это конкретное поведение.Назначает ли значение string для создания нового экземпляра? C#

string s = "ABC"; 
string s1 = "AB"+"C"; 
String s2 = new String("ABC"); 

s == s1 возвращает true но s == s2 возвращает false.

Я знаю string является ссылочным типом, поэтому экземпляр s и s1 ссылается два разных экземпляров, но почему s==s1 правда?

+1

Возможный дубликат [Операторы string.Equals() и == действительно такие же?] (Http://stackoverflow.com/questions/3678792/are-string-equals-and-operator-really-same) –

+1

http : //stackoverflow.com/questions/7074/what-is-the-difference-between-string-and-string-in-c – Khoshtarkib

+1

«AB» + «C» компилятор превращается в «ABC». И поскольку строки интернированы, s и s1 являются ссылками на одну и ту же строку. Тип строки является специальным и обрабатывается иначе, чем другие типы ссылок. –

ответ

3

why is s==s1 true ?

Этот вопрос был дан ответ, прежде чем — operator==() подменен для строк, чтобы избежать банальных ошибок, которые в противном случае случится.

Более интересный вопрос, почему после String s2 = new String("ABC"); якобы «s == s2 возвращает ложь».

Ну, строка, представленная, не компилируется. Что компилирует String s2 = new String(new char[] { 'A', 'B', 'C'});, после чего верно s==s2.

Отметьте, что string - просто ключевое слово C#, псевдоним для System.String; эти два варианта могут быть взаимозаменяемы без изменения значения программы.

Смежные вопросы