java返回数组的内存问题
大家好!
c++中,一个函数内部这样写:
int* fun(){
int nums[] = { 4,5,6};
return nums;
} 那么除非nums加static修饰,否则函数结束后nums的内存会被释放,外部不能再用。
Java中这样写:
public static int[] ByNew()
{
int[] nums= new int[] {
1,2,3
};
return nums;
}
当然没问题,new出来的数组不用担心函数结束后内存被释放
但是如果这样写呢:
public static int[] ByStaticInit()
{
int nums[] = { 4,5,6};
return nums;
}
我担心数组存放在栈内存,函数结束后内存被释放,不知道是不是这样?请大家指教。
(尽管下面测试代码运行没问题)
public class StaticInitArry
{
public static int[] ByNew()
{
int[] nums= new int[] {
1,2,3
};
return nums;
}
public static int[] ByStaticInit()
{
int nums[] = { 4,5,6};
return nums;
}
public static void main(String[] args)
{
int nums[] =ByNew();
for(int i=0;i<nums.length;i++)
{
System.out.println(nums[i]);
}
//////////////////////////////////////////
int nums2[] =ByStaticInit();
for(int i=0;i<nums2.length;i++)
{
System.out.println(nums2[i]);
}
}
}
/*
输出:
1
2
3
4
5
6
*/
------解决方案--------------------
返回值有被使用,GC不回收