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