В С# строки интернированы. То есть, если я создам строку foobar
и использую ее во второй раз, у С# будет только один экземпляр строки в памяти, и хотя у меня будет две ссылки, они оба будут указывать на тот же самый экземпляр строки. Это одна из причин, почему строки являются и должны быть неизменными в С#.
Теперь, мой вопрос: возможно ли каким-то образом создать две идентичные строки, чтобы они не были интернированы, но в итоге у нас есть два разных экземпляра строки в памяти с двумя разными адресами, которые содержат один и тот же текст
Если да, то как?
И, это что-то, что может случиться случайно, или вам нужно явно построить сценарий для этого случая?
И, наконец: Предположим, что в памяти есть два отдельных экземпляра строки с одинаковым значением, равны ли они (в терминах ==
)? Если да, то как работает ==
? Сначала сравните по ссылке, затем по значению или...?