内存分配变化

时间:2014-04-20 14:25:31

标签: java

public void changeColor(int[] value) 
{
    color = value;
}

在上面的代码中,Color是一个类中的int数组。和value是方法ChangeColor范围内的数组。按颜色=值;我将分配给值的内存空间分配给Color。根据我的理解,一旦方法结束,将删除特定于该方法的变量,在这种情况下,Color将能够在方法结束后访问其值吗?

2 个答案:

答案 0 :(得分:1)

“方法结束后Color会能够访问它的值吗?”
简短回答:是的,否则你为什么要将变量定义为全局变量。(无论它是引用还是原语)

请运行此代码以查看会发生什么:

public class Test {
    int[] Color = new int[2];
    int i = 20;
    public static void main(String[] args) {
        Test t = new Test();
        t.ChangeColor(new int[] {1,2,3});
        System.out.println(Arrays.toString(t.Color));
        System.out.print(t.i);

    }
    public  void ChangeColor(int[] value) 
    {
        Color = value;
        i = 10;
    }
}

答案 1 :(得分:0)

方法的int[] value参数是对数组的引用,但不是完整数组的副本。颜色也是一个参考,因此当您指定它们时,可以使它们指向同一个数组。

当方法存在时,从内存中删除值,但这只是一个引用,而不是数组。因此,即使方法已完成,仍然可以访问仍然指向数组的颜色。