Arrays finales en Java

Como todos sabemos, la variable final declarada solo se puede inicializar una vez, mientras que la variable de referencia, una vez declarada final, nunca se puede reasignar, ya que comenzará a referirse a otro objeto que hace que el uso de final sea impracticable. Pero tenga en cuenta aquí que con final estamos obligados a no hacer referencia a otro objeto, pero dentro del objeto se pueden cambiar los datos, lo que significa que podemos cambiar el estado del objeto pero no la referencia. Entonces, como todos sabemos que las arrays también son un objeto, las arrays finales entran en juego. El mismo concepto se aplica a las arrays finales, es decir, no podemos hacer que la array final se refiera a otra array, pero los datos dentro de una array que se hace final se pueden cambiar/manipular.   

Ilustración:

Java

// Java Program to Illustrate Final Arrays
// Can Be Reassigned But Not Re-referred
 
import java.util.*;
 
class GFG {
    public static void main(String[] args)
    {
 
        final int[] arr = { 1, 2, 3, 4, 5 };
 
        arr[4] = 1;
 
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}
Producción

1
2
3
4
1

Implementación:  

Java

// Java Program to Illustrate Final Arrays
 
// Importing required classes
import java.util.*;
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
 
        // Declaring a final array
        final int arr[] = { 1, 2, 3, 4, 5 };
 
        // Iterating over integer array
        for (int i = 0; i < arr.length; i++) {
            arr[i] = arr[i] * 10;
            System.out.println(arr[i]);
        }
    }
}
Producción

10
20
30
40
50

Salida Explicación: La array arr se declara como final, pero los elementos de una array se modifican sin ningún problema. Las arrays son objetos y las variables de objeto son siempre referencias en Java. Entonces, cuando declaramos una variable de objeto como final, significa que la variable no se puede cambiar para referirse a otra cosa. 

Ejemplo A:

Java

// Program 1
 
// Main class
class Test
{
    int p = 20;
    public static void main(String args[])
    {
       final Test t = new Test();      
       t.p = 30;
       System.out.println(t.p);  
    }   
}
Producción

30

Ejemplo B:

Java

// Java Program to Illustrate Final Arrays
// Where Compiler Error Is Thrown
 
// Main class
class GFG {
 
    int p = 20;
 
    // Main driver method
    public static void main(String args[])
    {
 
        // Creating objects of above class
        final GFG t1 = new GFG();
        GFG t2 = new GFG();
 
        // Assigning values into other objects
        t1 = t2;
 
        System.out.println(t1.p);
    }
}

Salida: Error del compilador: no se puede asignar un valor a la variable final t1

Conclusión: el programa anterior se compila sin ningún error y el programa 2 falla en la compilación. Discutamos por qué ocurrió el error.

Entonces, una array final significa que la variable de la array, que en realidad es una referencia a un objeto, no se puede cambiar para referirse a otra cosa, pero los miembros de la array se pueden modificar. Propongamos a continuación un ejemplo que justifique lo mismo.

Ejemplo:

Java

// Java Program to Illustrate Members in Final Array
// Can be Modified
 
// Main class
class GFG {
 
    // Main driver method
    public static void main(String args[])
    {
        // Declaring a final array
        final int arr1[] = { 1, 2, 3, 4, 5 };
 
        // Declaring normal integer array
        int arr2[] = { 10, 20, 30, 40, 50 };
 
        // Assigning values to each other
        arr2 = arr1;
        arr1 = arr2;
 
        // Now iterating over normal integer array
        for (int i = 0; i < arr2.length; i++)
 
            // Printing the elements of above array
            System.out.println(arr2[i]);
    }
}

Producción:

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *