Pregunta

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

Me trató el código anterior para ver si las variables de una matriz definitiva pueden ser reasignados [ ans : puede ser] .I entender que por una matriz definitiva Entero [] significa que no podemos asignar otra instancia Integer [] aparte de la que hemos asignado initially.I le gustaría saber si si es posible hacer que las variables de matriz también inmodificable.

¿Fue útil?

Solución

Esto no es posible en la medida que yo sepa.

Hay sin embargo es un método Collections.unmodifiableList (..) "noreferrer" que crea una vista de, por ejemplo inmodificable un List<Integer>.

Si quiere garantía de que ni siquiera el creador de la vista de lista no modificable podrá modificar la lista subyacente (modificables), echar un vistazo a Guava ImmutableList .

Otros consejos

No. Los contenidos de una matriz pueden ser cambiadas. No se puede impedir eso.

Colecciones tiene varios métodos para la creación de colecciones no modificables, pero las matrices no están previstas.

La palabra clave final sólo evita cambiar la referencia arr, es decir, no se puede hacer:

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

Si el arr objeto se refiere es objeto mutable (como las matrices), nada le impide su modificación.

La única solución es usar objetos inmutables.

Otra forma es utilizar esta función:

Arrays.copyOf(arr, arr.length);

La palabra clave 'final' se aplica únicamente a las referencias (puntero a la posición de memoria del objeto en el montón). No se puede cambiar la dirección de memoria (ubicación) del objeto. Su objeto hasta su forma en que maneja internamente la inmutabilidad.

añadido, aunque int es un int primitivo tipo de datos [] debe ser tratado como un objeto.

No se puede hacer esto

final int a = 5
a = 6

Usted puede hacer esto:

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

No se puede hacer esto:

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

Para cualquier otra persona leyendo esta vieja pregunta, tenga en cuenta también hay colecciones inmutables de Google guayaba. ImmutableList tiene un rendimiento mucho más fuerte que Collections.unmodifiableList (), y es posiblemente más seguro, ya que realmente es inmutable, y no está respaldada por una colección mutable.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top