📜  Java中的最终数组

📅  最后修改于: 2022-05-13 01:54:30.722000             🧑  作者: Mango

Java中的最终数组

众所周知,声明的 final 变量只能初始化一次,而一旦声明为 final 的引用变量永远不能重新分配,因为它将开始引用另一个对象,这使得 final 的使用变得不切实际。但请注意,使用 final 我们不一定要引用另一个对象,但在对象内可以更改数据,这意味着我们可以更改对象的状态但不能更改引用。因此,众所周知,数组也是一个对象,因此最终数组发挥了作用。相同的概念确实适用于最终数组,我们不能使最终数组引用其他数组,但是可以更改/操作最终数组中的数据。

插图:

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]);
        }
    }
}


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]);
        }
    }
}


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);  
    }   
}


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);
    }
}


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]);
    }
}


输出
1
2
3
4
1

执行:

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]);
        }
    }
}
输出
10
20
30
40
50

输出说明:数组arr被声明为 final,但数组的元素被更改没有任何问题。数组是对象,而对象变量在Java中始终是引用。因此,当我们将对象变量声明为 final 时,这意味着该变量不能更改为引用其他任何内容。

示例 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);  
    }   
}
输出
30

示例 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);
    }
}

输出:编译器错误:无法为最终变量 t1 赋值

所以最终数组意味着数组变量实际上是对对象的引用,不能更改为引用其他任何内容,但可以修改数组的成员。让我们在下面提出一个例子来证明这一点。

例子:

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]);
    }
}

输出: