我的最终数组是如何被修改的?

and*_*ndy 3 java variables static final class

我有类似的东西:

(SomeClass)
public static final float[][][] values = {...};

public float[][][] variable = values;
Run Code Online (Sandbox Code Playgroud)

所以,我创建了这个类的一个新实例,并将其传递valuespublic这个类的一个成员,就像我在那里做的那样.

事情是,当我variable现在使用并更改它和东西时,它会在所有实例中发生变化SomeClass.

final我认为在申报后不能修改?那么为什么不是variable更像是副本values而是被修改为一个static不是 final变量?

Chr*_*ian 5

当你这样做时会发生什么

public static final float[][][] values = {...};

public float[][][] variable = values;
Run Code Online (Sandbox Code Playgroud)

两者valuesvariable"指向"相同的引用(即到内存中的相同位置).

什么final意思是你不能改变那个引用(即你不能让变量引用内存中的另一个位置).您仍然可以修改变量引用的对象.