Java 中的 final 数组

2025 年 5 月 13 日 | 阅读 6 分钟

在 Java 中,final 是一个关键字。它是一个非访问修饰符。它意味着它限制了变量、方法和类的修改。它确保一旦一个实体被声明为 final,它只能被赋值和定义一次。

另一方面,一个引用变量一旦被声明为 final,就永远不能被重新赋值,因为它引用另一个对象,这使得 final 的使用变得无用。

这里需要注意的是,我们不能再引用另一个对象。但就 对象 而言,数据是可以更改的。这意味着我们可以更改对象的状态,而不是引用。

Java 中,数组 被视为对象,而在 Java 中,对象变量始终是引用。这里,final 数组的概念就发挥作用了。

在本节中,我们将通过一个示例和相应的 Java 程序来讨论 Java 中的 final 数组

Final 数组

在 Java 中,当我们声明一个数组为 final 时,意味着初始化后不能更改对该数组的引用。简单地说,final 适用于引用,而不适用于数组的内容。

让我们通过一个例子来理解它。

Final 数组示例

考虑以下代码片段。

关键点

不可变引用: 一旦 final 数组被赋值,我们就不能将数组变量指向另一个数组或 null。

可变内容: 我们可以更新、添加或删除数组中的元素(取决于数组的类型)。

这种行为通常用于确保引用的完整性,同时允许对其所持有的数据进行修改。

Final 数组的实现

输出

 
7 2 3 10 5 6    

在上面的示例中,我们观察到数组被声明为 final,但数组的元素被更改了。当我们删除第 10 行的注释时,它会产生编译错误。

输出

 
8, 11, 14, 17, 19, 21   

让我们讨论一些与 final 数组相关的其他 Java 程序。

程序 1:修改 Final 数组中的元素

输出

 
[Apple, Pineapple, Blueberry, Banana, Cherry]   

解释

该程序演示了在 Java 中将数组声明为 final 会使其引用不可变,这意味着数组不能被重新赋值,但单个元素仍然可以被修改。该程序初始化了一个 final String 数组,修改了一些元素,并打印了数组的更新值。

程序 2:将 Final 数组传递给方法

我们可以将一个 final 数组传递给一个方法。它也会修改数组的元素。

输出

 
[10, 20, 100, 200, 300, 60, 70]   

解释

该程序在 Java 中演示了 final 数组作为方法参数传递时的情况,其中引用本身不能被重新赋值,但单个元素可以被修改。modifyArray() 方法会更新数组的第三、第四和第五个元素(根据索引值),并且此更改在方法外部仍然存在。

程序 3:多维 Final 数组

类似地,我们可以将多维数组声明为 final。

输出

 
[[56, 2, 3], [4, 5, 19], [7, 45, 29]]   

解释

该程序演示了 Java 中的 final 二维数组,其中可以修改单个元素,但不允许将引用重新赋值给新数组。该程序初始化了一个 final 二维数组 matrix,修改了其中的一些元素,然后打印了更新后的矩阵。尝试将一个新数组赋值给 matrix 会导致编译错误。

程序 4:对象 Final 数组

当使用对象数组时,我们可以修改对象的属性,但不能修改引用。

输出

 
10, 2
3, 40   

解释

该程序演示了对象 Final 数组。它确保引用不能被重新赋值,但允许修改其元素。

程序 6:构造函数中的 Final 数组

输出

 
10 99 30   

解释

该程序演示了构造函数中的 final 数组,该数组确保引用不能被重新赋值,但允许修改其元素。DataHolder 类有一个通过构造函数初始化的 final 数组 data。

modifyData() 方法会更改给定索引处的值,表明元素可以被更新。在 main() 中,使用一个整数数组创建一个对象,修改第二个元素,并显示更新后的数组。


下一个主题Java 二叉树