Являются ли String Arrays изменчивыми?

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

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

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

Ответ 1

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

Это хорошо объяснено в этом ответе:

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

EDIT:

В некоторой степени связаны: Почему строки нельзя изменять в Java и .NET?

Ответ 2

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

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

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

Ответ 3

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

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

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