Вопрос

final Integer[] arr={1,2,3};
arr[0]=3;
System.out.println(Arrays.toString(arr));

Я попробовал вышеуказанный код, чтобы увидеть, можно ли переназначить переменные конечные массивы [анс: Это может быть]. Я понимаю, что в конечном целом [] массива это означает, что мы не можем назначить еще один экземпляр Integer [], кроме того, что мы назначали первоначально. Я хотел бы знать, можно ли сделать ли массив Переменные также немодифицируемые.

Это было полезно?

Решение

Это не возможно, насколько я знаю.

Однако есть метод Коллекции .unmodifiableList (..) что создает немодифицируемый вид, например, List<Integer>.

Если вы хотите гарантировать, что даже создатель немодифицируемого списка просмотра сможет изменить базовый (модифицируемый) список, посмотрите на Иммутаблельник Гуавы.

Другие советы

Нет. Содержимое массива может быть изменено. Вы не можете помешать этому.

Коллекции Имеет различные методы создания немодифицируемых коллекций, но массивы не предусмотрены.

Окончательное ключевое слово только предотвращает изменение ссылки на ART, то есть вы не можете сделать:

final int[] arr={1,2,3}; 
arr = new int[5]; 

Если объект ARR имеет ссылку на смежный объект (например, массивы), ничто не мешает вам модифицировать его.

Единственным решением является использование неизменных объектов.

Еще один способ использовать эту функцию:

Arrays.copyOf(arr, arr.length);

Ключевое слово «окончательное» применяется только к ссылкам (указатель на местоположение памяти объекта в куче). Вы не можете изменить адрес памяти (местоположение) объекта. Он до вашего объекта, как он внутренне обрабатывает неизменность.

Добавлено, хотя int представляет собой примитивный тип данных INT [] должен рассматриваться как объект.

Вы не можете сделать это

final int a = 5
a = 6

Ты можешь это сделать:

final int[] a = new int[]{2,3,4};
  a[0] = 6;

Вы не можете сделать это:

final int[] a = new int[]{2,3,4};
 a = new int[]{1,2,3}

Кто-нибудь еще прочитать этот старый вопрос, имейте в виду, что есть также неизменные коллекции Google Guava. ImmutableList имеет гораздо более сильную производительность, чем сборники .unmodifialeList (), и, возможно, безопаснее, поскольку он действительно неизменен, а не подкрепленный союзной коллекцией.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top