Final arrays in Java

Predict the output of following Java program.

filter_none

edit
close

play_arrow

link
brightness_4
code

class Test 
{
    public static void main(String args[])
    {
       final int arr[] = {1, 2, 3, 4, 5};  // Note: arr is final
       for (int i = 0; i < arr.length; i++)
       {
           arr[i] = arr[i]*10;  
           System.out.println(arr[i]);          
       }      
    }    
}

chevron_right


Output:

10 
20 
30 
40 
50 

The array arr is declared as final, but the elements of array are changed without any problem. Arrays are objects and object variables are always references in Java. So, when we declare an object variable as final, it means that the variable cannot be changed to refer to anything else. For example, the following program 1 compiles without any error and program fails in compilation.



filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output: 30

filter_none

edit
close

play_arrow

link
brightness_4
code

// Program 2
class Test 
{
    int p = 20;
    public static void main(String args[])
    {
       final Test t1 = new Test();       
       Test t2 = new Test();
       t1 = t2; 
       System.out.println(t1.p);      
    }    
}

chevron_right


Output: Compiler Error: cannot assign a value to final variable t1

So a final array means that the array variable which is actually a reference to an object, cannot be changed to refer to anything else, but the members of array can be modified.

As an exercise, predict the output of following program

filter_none

edit
close

play_arrow

link
brightness_4
code

class Test 
{
    public static void main(String args[])
    {
       final int arr1[] = {1, 2, 3, 4, 5};
       int arr2[] = {10, 20, 30, 40, 50};
       arr2 = arr1;      
       arr1 = arr2;  
       for (int i = 0; i < arr2.length; i++)
          System.out.println(arr2[i]);          
    }    
}

chevron_right


Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.



My Personal Notes arrow_drop_up


Article Tags :
Practice Tags :


9


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.