数组的定义与存储
数组是存储相同类型的集合,在内存上是一块连续的空间,并且数组在内存上是存放在堆上面的.
//数组的创建与初始化 //创建一个3个int类型的数组 int[] array1 = new int[]; //初始化这个数组为1,2,3 array1 = {1,2,3};
数组在内存当中的使用
小tips:
-
内存的作用:每一块内存都有各自的作用, 内存是专门用来存储程序运行时的数据的
-
Java当中一共分为两种数据类型(基本数据类型和引用数据类型)
-
数组就是一种非常常见的引用数据类型
-
引用数据类型创建的变量称为对象的引用,这个变量保存的是对象所在的空间地址
public static void main(String[] args){ //创建一个数组,会在堆上开辟出一块连续的空间 int[] a1 = new int[3]; //1 int[] a2 = {1,2,3,4}; //2 //以下为内存中的解释 }
如图所示,在内存当中,当我们进入main方法之后,会在栈中开开辟出一块空间,当进行:
int[] a1 = new int[3];
这一行代码时,会先在堆内存当中开辟出一个存储了三个int类型的连续空间,(没有赋值时统一初始化为0),
同时在main方法中开一小块空间去保存(指向)这个连续空间的地址(0x13),
并且把这一小块地址命名为a1,所以a1是对象的引用,保存的是对象的地址.(a2同样如此)
最后当main方法执行完毕之后,由于a1,a2是局部变量,生命周期随着方法执行完毕之后被销毁,
而在堆中的对象没有变量引用了,就会被自动回收掉,以免占用太多内存.
两个引用指向了同一个对象
public static void main(String[] args){ int[] a1 = {1,2,3,4}; //两个引用指向了同一个对象,即指向了同一个内存空间 int b1 = a1; //通过第二个引用修改了对象的原来的值 b1[0] = 13; }
此时a1和b1两个引用都同时指向了同一块内存空间,就可以通过b1这个引用去修改对象中的值了,
//通过第二个引用修改了对象的原来的值 b1[0] = 13; //修改之后a1[0]的值也是13了
null是什么
int a = null; //会发生空指针异常 int length = a.length;
小tips:
-
null 不能和0画等号
-
a这个引用不指向任何对象,
-
a不能做读写操作,否则会发生空指针异常