Year y [] = new Year[3] 不是创建了数组并分配了实体对象

img

img

Year y [] = new Year[3] 不是创建了数组并分配了实体对象?
再去操作对象应该没错吧?

Year year = new Year(); // 操作会申请一个Year的空间
Year[] years = new Year[3]; // 会申请一个Year指针数组,长度为3,注意只是申请了指针空间,并不是Year空间。

这里举个例子。

  1. 假如如一个Year a = new Year();a要占用100字节的空间,a指针需要占用4字节的空间,那么这次 new Year() 操作会申请100字节空间。

  2. 而 Year[] years = new Year[]; 操作只会申请三个Year指针的空间 和 Year[] 数组头指针控件,共计 4 * 3 + Year[] 数组头指针大小的空间,空间连续,并不包括 Year 100 字节控件


代码4报错,是会报错空指针异常,因为Year[] 数组的每一个位置指向的都是null,没有分配具体指向内容

new的话 就分配了空间。

数组中括号中的数字是表示初始化了一个多少长度的数组,就是这个数组可以存放多少数据