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 赋值
Conclusion: Above program compiles without any error and program 2 fails in compilation. Let us discuss why the error occured.
所以最终数组意味着数组变量实际上是对对象的引用,不能更改为引用其他任何内容,但可以修改数组的成员。让我们在下面提出一个例子来证明这一点。
例子:
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]);
}
}
输出: