2015-05-21 3 views
1

Edit:новый String() не создает новый ссылочный объект в C#?

Почему этот вопрос не дублировать? Я не прошу разницу между .Equals() и ==. Я спрашиваю, как работает ==. Я имею в виду, когда я создал строки, используя другой метод, я должен был увидеть другой результат. Но я вижу тот же результат.

Я искал == Оператор в C#. К моему удивлению, он дал тот же результат для следующих кодов (вопреки JAVA). Но согласно this, == для контрольной проверки, и я должен увидеть другой результат для моего кода, то почему я вижу тот же результат для обоих из них? Разве я не вижу разные результаты для своих кодов? Это потому, что new String() в C# не генерирует новую ссылку?

String s = "abc"; 
String s1 = "abc"; 
Console.WriteLine("Expected output: True, Actual output: " + (s1==s).ToString()); 

Выход

Ожидаемый результат: Правда, Фактический выход: Правда проверка

Другой код

String s2 = new String("abc".ToCharArray()); 
    String s3 = new String("abc".ToCharArray()); 
    Console.WriteLine("Expected output: False, Actual output: " + (s2 == s3).ToString()); 

Выход

Ожидаемый результат: Ложные, Фактический выход: Правда

Примечание: Я понимаю, чем различие, присвоенный & проверки значения. Я пробовал результат с ReferenceEquals, и он показывает ожидаемый результат для меня.

+0

Если дубликат не распространяется на вашу проблему, обязательно проверьте результаты поиска http://www.bing.com/search?q=java+c%23+string+equals, чтобы узнать, есть ли дубликат. –

+0

@AlexeiLevenkov Я отредактировал свой вопрос, чтобы показать, почему он не является дубликатом другого вопроса SO.Пожалуйста, посмотрите на него :) – Abhishek

+0

@Abhishek - В обоих случаях вы создаете строку ' "ABC"' и сравнивать ' "ABC" == "ABC"'. Почему вы ожидаете «ложь» на втором примере? – Kobi

ответ

7

Обычно для ссылочных типов == оператор выполняет проверку ссылочного равенства.

Строка также является ссылочным типом, но в классе String == оператор перегружен, чтобы проверить равенство контента, а не ссылочное равенство.

Это говорит, я цитирую

Determines whether two specified strings have the same value.

https://msdn.microsoft.com/en-us/library/system.string.op_equality(v=vs.110).aspx Читать здесь

FYI, в строке != оператор также oveloaded для проверки строки неравенства контента.

+0

Awesome. Понял! Никогда не знал, что '==' перегружен в C#. – Abhishek

+0

Да, я попробовал. Но он показывает, подождите несколько минут, прежде чем отметить это как ответ. :) Дай мне немного времени – Abhishek

1

В операторе C# == для строки сравнивается значение, а не ссылка.

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