Сколько строковых объектов создается при использовании конкатенации строк в C # - PullRequest
0 голосов
/ 28 февраля 2019

Я новичок в C #, просто хочу задать вопрос о конкатенации строк.

string str = "My name is";
str += "John"

Q1 - Есть ли в C # (.NET) такой же пул концептуальных строк в Java?

Q2 - сколько строковых объектов создано?

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Да, такая вещь есть.

Общеязыковая среда выполнения сохраняет строковое хранилище, поддерживая таблицу, которая называется внутренним пулом, которая содержит одну ссылку на каждую уникальную литеральную строку, объявленную или созданную программным способом в вашей программе.Следовательно, экземпляр литеральной строки с определенным значением существует только один раз в системе. источник

В вашем случае, я полагаю, будет три распределения.

0 голосов
/ 28 февраля 2019
1001 * Q1-ли C # (. NET) имеют ту же концепцию струнный пул в Java?

Ответ: нет, ̶ Использование строк C # ̶, непохожее строковое БАССЕЙН̶I̶n̶ ̶j̶a̶v̶a̶, каждая строка является собственной ссылкой;

Исправление : мне пришлось исследовать это для Java ... Это концептуально то же самое, я ошибался в деталяхпула строк Javas

C # обычно называет его интернированием строк

Подробнее об этом можно прочитать здесь: Fabulous Adventures In Coding : Блог Эрика Липперта Бывший блог

String interning и String.Empty

Если у вас два одинаковых строковых литералав одном модуле компиляции генерируемый нами код гарантирует, что CLR создаст только один строковый объект для всех экземпляров этого литерала в пределах assembly.Эта оптимизация называется «интернирование строк».

Интернирование строк - это функция интерфейса командной строки, которая повторно использует экземпляр строки в определенных ситуациях:

  1. string литералы, созданные с помощьюldstr IL команда
  2. При явном вызове с использованием string.Intern

Q2 - сколько строковых объектов создано?

Поскольку строки в C # являются неизменяемыми, вы получаете 3 выделения строк из ваших 2 операторов

// 1st string
string str = "My name is";

// 2nd string
// "John"

// 3rd string, which is the concatenation of the first 2
str += "John"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...