Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 内存分配更改_Java - Fatal编程技术网

Java 内存分配更改

Java 内存分配更改,java,Java,在上面的代码中,Color是一个类中的int数组。值是方法ChangeColor范围内的数组。颜色=价值;我将分配给value的内存空间分配给Color。根据我的理解,一旦方法结束,特定于该方法的变量将被删除,在这种情况下,Color能否在方法结束后访问其值???“Color能否在方法结束后访问其值???” 简短回答:是的,否则为什么要将变量定义为全局变量(不管它是引用还是原语) 请运行此代码以查看发生的情况: public void changeColor(int[] value) {

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

“Color能否在方法结束后访问其值???”
简短回答:是的,否则为什么要将变量定义为全局变量(不管它是引用还是原语)

请运行此代码以查看发生的情况:

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

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


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

在惯用语言中,Java类以大写字母命名,变量以小写字母命名。您的示例可能会令人困惑,因为您使用的是这种非标准命名。另外,
Color
是JDK中的一个
,这更混淆了这个问题!
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;
    }
}