Java tableau non modifiable
final Integer[] arr={1,2,3};
arr[0]=3;
System.out.println(Arrays.toString(arr));
J'ai essayé le code ci-dessus pour voir si un tableau final de variables peuvent être réaffectés[sna:il peut être].Je comprends que par une finale Integer[] tableau, cela signifie que nous ne pouvons attribuer à une autre instance de Integer[] en dehors de celui que nous avons attribué initialement.Je voudrais savoir si il est possible de faire le tableau des variables aussi inmodifiable.
source d'informationauteur Emil
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas possible pour autant que je sais.
Il existe cependant une méthode Les Collections.unmodifiableList(..) qui crée un inmodifiable vue par exemple d'un
List<Integer>
.Si vous voulez vous assurer que pas même le créateur de la inmodifiable de la liste d'affichage seront en mesure de modifier le sous-jacent (modifiable) de la liste, jetez un oeil à La goyave est ImmutableList.
Pas. Le contenu d'un tableau peut être modifié. Vous ne pouvez pas l'en empêcher.
Collections a différentes méthodes pour la création de inmodifiable collections, mais les tableaux ne sont pas fournies.
Le mot-clé final seulement empêche de changer l'arr de référence, c'est à dire que vous ne pouvez pas faire:
Si l'objet arr est fait référence à mutable objet (comme des tableaux), rien ne vous empêche de le modifier.
La seule solution est d'utiliser des objets immuables.
Le mot-clé "final" ne s'applique qu'à la référence (pointeur à l'emplacement de la mémoire de l'objet dans le tas). Vous ne pouvez pas modifier l'adresse de mémoire (emplacement) de l'objet. Son jusqu'à votre objet, comment il gère en interne l'immutabilité.
Ajouté, bien que l'int est un type de données primitif int[] doit être traité comme un objet.
Vous ne pouvez pas faire ce
Vous pouvez faire ceci:
Vous ne pouvez pas faire ceci:
À quelqu'un d'autre lecture de cette vieille question, gardez à l'esprit il y a aussi Google Goyave immuables de collections. ImmutableList a beaucoup plus de performances que les Collections.unmodifiableList(), et est sans doute plus sûr que c'est vraiment immuable,et qui n'est pas soutenue par une mutable collection.
Une autre façon est d'utiliser cette fonction: