Java中的最终int

Java中的最终int,java,arrays,final,Java,Arrays,Final,关于Java中final的功能,我有一个相对简单的问题。 当我编译此代码时: import java.util.*; 导入java.lang.*; 导入java.io.*; 类数组 { 公共静态void main(字符串[]args)引发java.lang.Exception { final int[]myArray={1,2}; myArray[1]=3; System.out.println(myArray[1]); } } 数字“3”被打印出来。然而,我的印象是,final意味着该数组(

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

import java.util.*;
导入java.lang.*;
导入java.io.*;
类数组
{
公共静态void main(字符串[]args)引发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”。请帮助我澄清我对
期末考试的理解

An
int[]
是一种对象类型(不是原语,也不是
int
)。最终引用意味着您在引用
对象
实例时无法重新分配引用

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

a1={3,4};// Final表示不能更改值。 但是当
int[]myArray时,然后myArray保存数组的引用,而不是值。
那么这个声明,,
myArray[1]=3;
更改该位置的内容,因为它未声明为最终内容。

语句
myArray=(任意值)是非法的,因为我们正在更改声明为final的引用。

将变量定义为final时,不能将其重新分配给其他值

final int a = 2;
a = 5; \\ error
类似地,使用最终数组时:

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

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

一个
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

可能与您所说的原语数组是
对象的说法重复?@mrres1每个数组都是
对象
。@mrres1(部分)说数组类型的直接超类是
对象
。你的链接回答是关于C++(不是java)。