ReferenceEquals против оператора "==" [дубликат] ⇐ C#
ReferenceEquals против оператора "==" [дубликат]
насколько я знаю, оператор «==" для ссылочных переменных проверяет, указывают ли переменные на одну и ту же точку памяти, но согласно исходному коду функции ReferenceEquals(a, b), он также проверяет, указывают ли две переменные на одну и ту же точку памяти, код: public static bool ReferenceEquals(object? objA, object? objB) => objA == objB;. Но когда я решил проверить, как это работает со строкой, я заметил, что этот оператор и функция возвращают разные результаты
Вот моя попытка:
string a = new string("Джон"); строка b = новая строка («Джон»); Console.WriteLine(ReferenceEquals(a, b)); //возвращает Ложь Console.WriteLine(a==b); // возвращает истину Но исходный код ReferenceEquals такой же, как оператор «==", поэтому на самом деле я предполагал, что Console.WriteLine(a==b); также вернет False, поскольку проверяет наличие двух переменных укажите одно и то же место в памяти, поэтому я намеренно создал строку с помощью ключевого слова «new», потому что я знаю, как работает интернирование строк, поэтому я намеренно создал разные места в памяти для разных переменных с помощью нового ключевого слова. Итак, мой первый вопрос: не могли бы вы сказать мне, почему «a==b» возвращает True, поскольку a и b указывают на разные ячейки памяти? Второй вопрос: не могли бы вы рассказать мне, как интернирование работает для массивов, насколько я понимаю, оно отличается от интернирования строк, есть ли какие-нибудь хорошие ресурсы? Спасибо за внимание!
насколько я знаю, оператор «==" для ссылочных переменных проверяет, указывают ли переменные на одну и ту же точку памяти, но согласно исходному коду функции ReferenceEquals(a, b), он также проверяет, указывают ли две переменные на одну и ту же точку памяти, код: public static bool ReferenceEquals(object? objA, object? objB) => objA == objB;. Но когда я решил проверить, как это работает со строкой, я заметил, что этот оператор и функция возвращают разные результаты
Вот моя попытка:
string a = new string("Джон"); строка b = новая строка («Джон»); Console.WriteLine(ReferenceEquals(a, b)); //возвращает Ложь Console.WriteLine(a==b); // возвращает истину Но исходный код ReferenceEquals такой же, как оператор «==", поэтому на самом деле я предполагал, что Console.WriteLine(a==b); также вернет False, поскольку проверяет наличие двух переменных укажите одно и то же место в памяти, поэтому я намеренно создал строку с помощью ключевого слова «new», потому что я знаю, как работает интернирование строк, поэтому я намеренно создал разные места в памяти для разных переменных с помощью нового ключевого слова. Итак, мой первый вопрос: не могли бы вы сказать мне, почему «a==b» возвращает True, поскольку a и b указывают на разные ячейки памяти? Второй вопрос: не могли бы вы рассказать мне, как интернирование работает для массивов, насколько я понимаю, оно отличается от интернирования строк, есть ли какие-нибудь хорошие ресурсы? Спасибо за внимание!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Использование «is object» вместо «!= null» или Object.ReferenceEquals() [закрыто]
Anonymous » » в форуме C# - 0 Ответы
- 21 Просмотры
-
Последнее сообщение Anonymous
-
-
-
ObservableCollections против ObservableObject против ObservableRecipient против ViewmodelBase?
Anonymous » » в форуме C# - 0 Ответы
- 74 Просмотры
-
Последнее сообщение Anonymous
-
-
-
ObservableCollections против ObservableObject против ObservableRecipient против ViewmodelBase?
Anonymous » » в форуме C# - 0 Ответы
- 60 Просмотры
-
Последнее сообщение Anonymous
-