java中的数组是引用类型。
当数组采用静态初始化的时候,会在堆区开辟空间吗? 
比如:
int[] a={1,2,3,4,5};
 用这个数组的的时候,它是在编译时候的将代码区{1,2,3,4,5}的地址赋给栈中的a呢,还是将在
堆中开辟空间,然后将代码区{1,2,3,4,5}的内容赋给堆中空间,然后将此空间的地址再赋值给a。java数组静态初始化

解决方案 »

  1.   

    个人见解:
    你这个问题可能不同的虚拟机有不同的实现。
    也可能是在堆中开辟的,也有可能把数据存放在常量池里,也有可能是在栈上。
    自己看看java源码或许能够知道,不过知道与不知道对开发来说没什么意义。
      

  2.   

    自己去查阅一下资料看看,我记得String(引用类型)好像是这样说的String a="AAAA",String a=new String();a="a";第一个他是不会在内存地址开辟的,而第二个才会,好像是这样的吧,我说的是好像,呵呵
      

  3.   

    new 的时候才会在堆中分配空间吧
      

  4.   

    在堆中分配,int[]是一个特殊的对象,系统要知道它的长度,每次存取做边界检查。这跟c是不一样的。
      

  5.   

    数组也是一种引用类型数据,所有的引用数据类型都是在堆中开辟内存空间的。不一定只是new出的对象参考下面网站http://www.cnblogs.com/hmiinyu/archive/2012/10/22/2732781.html