我确定有一个简单的答案,我会在几分钟内感到愚蠢,但在这里,它已经很晚了,我很累....
所以,我可以问,为什么这个代码......
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);
}
}
Run Code Online (Sandbox Code Playgroud)
给出这个输出
Count:2.4
Count:1.6
Count:1.6
Run Code Online (Sandbox Code Playgroud)
当我期待
Count:2.4
Count:1.6
Count:2.4
Run Code Online (Sandbox Code Playgroud)
我觉得很蠢......
这个问题也被问到链接文本,如果在其他论坛得到解答,我会在这里发帖.
Java数组是可变的引用类型.
在编写时floats = finalFloats;,您将使floats字段引用与之相同的数组实例finalFloats.
因此,在编写时floats[0]=0.1f,您还要修改原始finalFloats数组.
所有final关键字都会阻止您指定finalFloats指向新实例(例如finalFloats = new float[7]); 它不会阻止您改变实例.
为了使它按照您期望的方式运行,您需要复制数组,如下所示:
floats = Arrays.copyOf(finalFloats, finalFloats.length);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
311 次 |
| 最近记录: |