代码之家  ›  专栏  ›  技术社区  ›  Dori

float[]行为

  •  2
  • Dori  · 技术社区  · 14 年前

    那么,我能问一下,为什么这个代码。。。

    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 ,如果在其他论坛得到回复,我会在这里发布。

    1 回复  |  直到 14 年前
        1
  •  6
  •   SLaks    14 年前

    Java数组是可变的引用类型。

    当你写作的时候 floats = finalFloats; ,您正在制作 floats 字段引用与 finalFloats
    因此,当你写 floats[0]=0.1f 最终贷款 数组。

    所有的 final 关键字不阻止您分配 最终贷款 finalFloats = new float[7] ); 它不会阻止你改变实例。

    floats = Arrays.copyOf(finalFloats, finalFloats.length);