我们可以在 Java 中为 final 数组赋值吗?
java 8object oriented programmingprogramming
数组是一个可以容纳固定数量项目的容器,这些项目应该是同一类型。大多数数据结构都使用数组来实现其算法。以下是理解数组概念的重要术语。
元素 − 存储在数组中的每个项目称为元素。
索引 − 数组中元素的每个位置都有一个数字索引,用于标识元素。
数组的大小将在创建时确定。
示例
public class ArrayExample { public static void main(String args[]){ //声明一个数组 int[] myArray = {233, 783, 453}; //打印数组 for(int i=0; i<myArray.length; i++){ System.out.println(myArray[i]); } } }
输出
233 783 453
最终变量
如果您稍后声明最终变量,则无法修改或为其赋值。此外,与实例变量一样,最终变量不会使用默认值进行初始化。
因此,一旦声明最终变量,就必须初始化它们。
不过,如果您尝试声明未初始化的最终变量,则会产生编译错误,提示"变量 variable_name 未在默认构造函数中初始化"。
示例
public class FinalVariables { public static void main(String args[]){ final int j = 10; j = 220; } }
最终数组
但在数组的情况下,您可以将数组声明为 final,并且仍然可以为其重新赋值而不会出现任何编译时错误。
示例
public class FinalArrays { public static void main(String args[]){ //声明数组 final int[] myArray = {233, 783, 453}; //打印数组 for(int i=0; i<myArray.length; i++){ System.out.println(myArray[i]); } //更改数组的值 myArray[0] = 2020; myArray[1] = 3040; myArray[2] = 4060; for(int i=0; i<myArray.length; i++){ System.out.println(myArray[i]); } } }
输出
233 783 453 2020 3040 4060
原因是数组与变量不同,数组是对象,它们不保存值,而是指向保存值的位置的地址。
对于对象和数组,如果引用变量是 final,则它不能指向另一个对象/数组。如果您尝试这样做,将生成编译时错误。
示例
public class FinalArrays { public static void main(String args[]){ //声明数组 final int[] myArray1 = {233, 783, 453}; //打印数组 System.out.println(myArray1); int[] myArray2 = {233, 783, 453}; myArray2[0] = 2020; myArray2[1] = 3040; myArray2[2] = 4060; myArray1 = myArray2; } }
输出
编译时错误
inalArrays.java:14: error: cannot assign a value to final variable myArray1 myArray1 = myArray2; ^ 1 error