两个表达式创建的实体都是在堆里,它们的区别如下:
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在堆内存中重新开辟一块空间
int [ ] arr = {3,1,6,8,2,5};//虚拟机先查找有没有{3,1,6,8,2,5}这个实体,有,则arr直接指向实体,没有,则重新创建实体。
int [ ] arr = new int [ ] {3,1,6,8,2,5};//在栈内存中开辟空间存放变量arr,在堆内存中开辟空间分配首地址,并创建连续区间,初始化。首地址赋值给arr
int [ ] arr = {3,1,6,8,2,5};//在常量池中存放{3,1,6,8,2,5},在栈内存中开辟空间存放变量arr,初始化。首地址赋值给arr