2013-04-20 1 views
5

Интересно, изменяются ли массивы String в Java? Я знаю, что Строки неизменяемы, но как насчет строковых массивов?Являются ли String Arrays изменчивыми?

Если у меня есть строковый массив и изменение содержимого, будет ли создан новый строковый объект? Или изменится фактическое значение?

Заранее спасибо

+0

Массивы в Java изменяемы, это не зависит от типа массива, они будут изменяться в любом случае. – bsiamionau

ответ

13

The String изложенных в String[] действительно неизменно, но массив изменчиво.

Это хорошо объясняется в this answer:

  • Неизменность означает, что объекты определенного типа не может изменить каким-либо существенным образом для внешних наблюдателей
    • Integer, String и т.д. неизменны
    • Обычно все типы значений должны быть
  • объекты массива изменчивы
    • Это может быть массивом ссылок на неизменные тип, но сам массив является изменяемым
      • Значения вы можете установить эти ссылки на все, что вы хотите
      • Также верно и для массива примитивов
    • непреложным массив не будет практичным
  • Ссылки на объекты могут быть разделены
    • Если объект является изменяемым, мутация будет видно через все эти ссылки

EDIT:

Несколько родственный: Why can't strings be mutable in Java and .NET?

+1

Хороший ответ, также я могу предложить OP прочитать [этот вопрос] (http://stackoverflow.com/questions/93091/why-cant-strings-be-mutable-in-java-and-net), чтобы понять, почему строки в java неизменяемы. – bsiamionau

+0

@zvzdhk добавил ссылку в ответ. Благодарю. –

+0

Любая проницательность WTF заставила массивы неизменными в C#? – DanteTheSmith

3

Насколько я помню, поле в вашем массиве будет ссылаться на другую строку

String[] array {"I","like","rain"}; 
array[2] = "sun" 

Ваш массив можно изменить. сами струны.

1

В массивах каждый элемент является указателем на объект. Так что, когда вы делаете что-то вроде

String one = "1"; 
String two = "2"; 
String three = "3"; 
String four = "4"; 
String[] myStringArray = {one, two, three}; 
myStringArray[2] = four; 

Затем указатель, который был на 3-й элемент массива теперь указывает на четыре вместо трех.

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

  • Нет связанных вопросов^_^