日期:2014-05-20  浏览次数:20730 次

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]);  
  }  
 
   
  }  
}  
 
/* 
输出: 






*/

------解决方案--------------------
返回值有被使用,GC不回收