В той или иной форме я часто сталкиваюсь со следующим вопросом (заданным здесь в псевдокоде):
String myString = "Hello"
someObject.stringProperty = myString
myString = "World"
Почему someObject.stringProperty теперь не равно «World»?
Кажется, существует путаница в отношении роли, которую играет следующее утверждение в объяснении того, почему это так:
Строки неизменны
Что вы думаете?
Если вы считаете, что это утверждение неприменимо, я бы спросил вас вот о чем: в языке, где строки были изменяемыми, а оператор присваивания изменял их фактическое значение (вместо простого изменения ссылки), ваш ответ все еще имеет смысл?
ИЗМЕНИТЬ:
Хорошо, я чувствую необходимость прояснить некоторые вещи:
Меня не смущает, как работают строки, ссылки или присваивания. Я совершенно ясно говорю об этой теме. Я не спрашиваю, как работают струны. Я спрашиваю: «Какую роль играет неизменяемость строк в объяснении ссылок на строки для разработчиков». Мы можем пропустить атаки Ad-Hominem, которые меня должны смущать.
Я ищу логически строгий ответ для разработчика, задающего процитированный вопрос, который не содержит или не предполагает неизменности строк.
Классификация существующих аргументов:
String Immutability has nothing to do with it because the references are changing, not the values of the strings
Этот ответ предполагает именно тот факт, о котором я спрашиваю.Assignment means assignment of references not assignment of values
Опять же, это предполагает именно тот факт, о котором я спрашиваю. Нет причин, по которым это должно иметь место для строк. Это просто имеется случай со строками для повышения производительности и других причин.
There is no reason it _must_ be the case for strings.
Это относится не только к строкам, так ведет себя оператор присваивания в C# для всех типов. - person Rob   schedule 03.07.2011that is how the assignment operator behaves in C# for all types
, но вы не признаете, что строки уже имеют специальную синтаксическую обработку в C#... просто посмотрите, как они создаются - так что мне трудно понять, почему это не воспринимается как язык выбор дизайна. Ответ, который я продолжаю получать от людей, кажется, потому что так оно и есть. Да, я понимаю, что так оно и есть... не в этом вопрос. - person Steve   schedule 03.07.2011there is no point in discussing the validity of any other case but what is currently the technical issue at hand
- Суть в назидании. Более глубокое понимание того, что есть, чего нет и почему это так, является фундаментальным аспектом роста. Понять, что это решение языкового дизайна, и понять, почему это решение имеет такой большой смысл, что каждый язык (о котором я знаю) работает таким образом, но что существует также и мир языкового дизайна, в котором вы можете создавать свои собственные языковые правила и поиск компромиссов — важная часть понимания того, что происходит на самом деле. ИМО. - person Steve   schedule 03.07.2011This is a design choice rooted in the quest for simplicity and consistency
). Во всяком случае, это потому, что вы не можете выделить достаточно памяти для неопределенного количества символов, и любая сложная структура данных была бы слишком неэффективной для базового типа, такого как нить. - person Steve   schedule 03.07.2011