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]);   
  }   
 
    
  }   
}   

肥皂起泡泡
浏览 611回答 2
2回答

米脂

Java自动管理栈和堆,程序员不能直接地设置栈或堆.你可以搜索一下java的四种引用类型。一旦对象没有被引用时会自动被回收
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java