那么,我能问一下,为什么这个代码。。。
public class TestProcess { final float[] finalFloats = {0.9f,0.8f,0.7f}; float[] floats; public static void main(String[] args) { new TestProcess(); } public TestProcess(){ floats = finalFloats; printTotal(); floats[0]=0.1f; printTotal(); floats = finalFloats; printTotal(); } void printTotal(){ float count = 0f; for(float f : floats){ count+=f; } out("Count:"+count); } void out(String s){ System.out.println(s); } }
给出这个输出
Count:2.4 Count:1.6 Count:1.6
Count:2.4 Count:1.6 Count:2.4
我觉得自己很愚蠢。。。!
也有人问过这个问题 link text ,如果在其他论坛得到回复,我会在这里发布。
Java数组是可变的引用类型。
当你写作的时候 floats = finalFloats; ,您正在制作 floats 字段引用与 finalFloats 因此,当你写 floats[0]=0.1f 最终贷款 数组。
floats = finalFloats;
floats
finalFloats
floats[0]=0.1f
最终贷款
所有的 final 关键字不阻止您分配 最终贷款 finalFloats = new float[7] ); 它不会阻止你改变实例。
final
finalFloats = new float[7]
floats = Arrays.copyOf(finalFloats, finalFloats.length);