Java中可以为final数组赋值吗?


数组是一种可以容纳固定数量项的容器,这些项必须是相同类型。大多数数据结构都利用数组来实现其算法。以下是理解数组概念的一些重要术语。

  • 元素 − 存储在数组中的每一项都称为元素。

  • 索引 − 数组中每个元素的位置都有一个数字索引,用于标识该元素。

数组的大小在创建时确定。

示例

 在线演示

public class ArrayExample {
   public static void main(String args[]){
      //Declaring an array
      int[] myArray = {233, 783, 453};
      //Printing the array
      for(int i=0; i<myArray.length; i++){
         System.out.println(myArray[i]);
      }
   }
}

输出

233
783
453

final变量

如果声明了一个final变量,之后就不能修改或赋值。此外,与实例变量一样,final变量不会用默认值初始化。

因此,必须在声明final变量时对其进行初始化。

但是,如果尝试在未初始化的情况下声明final变量,则会生成一个编译错误,提示“变量 variable_name 在默认构造函数中未初始化”

示例

public class FinalVariables {
   public static void main(String args[]){
      final int j = 10;
      j = 220;
   }
}

final数组

但是对于数组,您可以声明数组为final,并且仍然可以重新赋值而不会出现任何编译时错误。

示例

 在线演示

public class FinalArrays {
   public static void main(String args[]){
      //Declaring an array
      final int[] myArray = {233, 783, 453};
      //Printing the array
      for(int i=0; i<myArray.length; i++){
         System.out.println(myArray[i]);
      }
      //Changing the values of the array
      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[]){
      //Declaring an array
      final int[] myArray1 = {233, 783, 453};
      //Printing the array
      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

更新于:2019年9月6日

408 次浏览

启动您的职业生涯

完成课程获得认证

开始学习
广告
© . All rights reserved.