Java中的final int

时间:2015-01-24 05:22:05

标签: java arrays final

关于Java中final的功能,我有一个相对简单的问题。 当我编译这段代码时:

import java.util.*;
import java.lang.*;
import java.io.*;


class Arrays
{
 public static void main (String[] args) throws java.lang.Exception
 {
final int[] myArray = { 1,2 }; 
myArray[1] = 3; 
System.out.println (myArray[1]);  
 }
}

号码" 3"得到印刷。但是,我的印象是final意味着该数组中保存的值(myArray)不能再变化且不变。

这里还有另一段代码:

final int [] a1 = {1, 2}; 
int [] b1 = {3, 4};
a1 = b1; System.out.println (a1[1]);

我相信系统应该打印" 2"因为a1已完成,并且数组中的值是常量。但是,我的朋友认为它应该是" 4"。请帮助我澄清对final的理解。

4 个答案:

答案 0 :(得分:2)

int[]是一种对象类型(不是基元而不是int)。最终引用意味着在引用Object实例时无法重新分配引用。

final int [] a1 = {1, 2}; 
a1 = {3,4}; // <-- illegal, a1 is final.

事实上,Java在两种情况下都会产生 finalObject的值是它的'引用)。

答案 1 :(得分:0)

最终意味着无法更改值。 但是当声明int[] myArray;时,myArray会保存数组的引用,而不是值。 声明, myArray [1] = 3; 更改该位置的内容,因为它未声明为final。 语句myArray = (any value);是非法的,因为我们正在更改被声明为final的引用。

答案 2 :(得分:0)

将变量定义为final时,无法将其重新分配给其他值。

final int a = 2;
a = 5; \\ error

同样,当你使用最终数组时:

final int[] arrA = {1,2,3};
arrA = new int[]{4, 5, 6}; \\ error

但您可以随时更改数组中的值,因为它们不是final。因此,似乎您的第二个示例将无法编译。如果您不想更改数组中的值,那么最好使用enum

答案 3 :(得分:0)

final修饰符声明变量无法更改。但是,对象/数组变量实际上只是未命名对象/数组的句柄。由于对象变量的值是句柄,因此它确保句柄不能更改。该句柄另一端的数组与final完全无关。

 final int myInt = 5; //myInt cannot change (5 is the value of myInt)
 final int[] myArr = {1,2};
 myArr[0] = 3; //legal. myArr is a handle to a int[] and we're not modifying the handle