【发布时间】:2018-02-15 12:23:08
【问题描述】:
以下代码在 Java 中是否安全?我的担心是因为在函数 f() 中,变量 arr 是在堆栈上分配的,因此在离开作用域时会被释放,但仍会在作用域之外被引用。
public class Main {
public static class Array {
public final int[] arr;
public Array(int arr[]) {
this.arr = arr;
}
}
public static Array f() {
int arr[] = {1, 2, 3};
return new Array(arr);
}
public static void main(String[] args) {
Array a = f();
System.out.println(a.arr[0]);
System.out.println(a.arr[1]);
System.out.println(a.arr[2]);
}
}
【问题讨论】:
-
arr变量的生命周期在f结束时结束,但 数组 的生命周期与变量的生命周期是分开的。 -
您不必担心 Java 中的内存管理。如果你习惯 C++,想想智能指针。
-
但是
Array变量存储的不是生命周期结束的变量的引用吗? -
没有。它存储对数组的引用,而不是变量。在 Java 中不能引用变量。