Java语言基础-数组的动态初始化和内存分析

Java数组的动态初始化操作:
由我们来设置数组的元素个数(数组长度),而每一个数组元素的初始值由系统决定。
语法:
数组元素类型[] 数组名 = new 数组元素类型[length];

int[] ages = new int[100];
不同数据类型的初始值
byte,short,int  初始值0
long            初始值oL
float           初始值0.0F
double          初始值0.0D
boolean         初始值false
char            初始值'\u0000' 表示空
引用数据类型      初始值null

内存分析

int[] nums = new int[3];
System.out.println(nums.length); // 3
  1. int[] nums 声明一个变量,此时ages=null
    Java语言基础-数组的动态初始化和内存分析_第1张图片
  2. new int[3] 开辟内存空间,因为是intl类型,系统默认初始值是0
  3. 赋值操作。这一步后nums 变量就引用了0x1234 这个内存地址。以后我们操作nums,其实就是操作的nums引用的内存空间
    Java语言基础-数组的动态初始化和内存分析_第2张图片

继续分析这句:

nums = new int[5];

1.开辟内存空间,分配初始值
2.赋值。此刻nums就引用0x3456,这一步和数组的静态初始化是一样的。
Java语言基础-数组的动态初始化和内存分析_第3张图片

如何我们把

int[] nums = new int[3];
nums = null; // 此时nums没有引用任何内存空间
System.out.println(nums.length);

程序会报错如下:

java.lang.NullPointerException

什么时候使用静态初始化,什么时候使用动态初始化?

当我们事先知道,需要存储哪些数据的时候,选用静态初始化;
当我们事先不知道,需要存储哪些数据的时候,只能使用动态初始化

你可能感兴趣的:(Java基础入门)