深入理解数组-数组在内存中是怎么存放的

数组是引用类型的数据类型
特点:
1、长度固定
2、存放数据类型相同
3、数组必须先进行初始化才能使用
如果定义数组变量时没有进行初始化、系统会为数组赋默认值
整数类型-byte、short、int、long,默认值是 0
浮点类型-float、double ,默认值是 0.0
字符类型-char ,默认值是 ‘\u0000’
布尔类型-boolean,默认值是 false
引用类型-类、接口、数组,默认值是 null

–下面来看数组在内存中是怎么存放的

public class InitArray {
	public static void main(String[] args) {
	   //1、动态初始化,我们指定数组长度,系统自动赋默认值
		int[] b = new int[5];
		//2.静态初始化,我们赋初值、系统自动决定数组长度
		int[] a = {33,44,55};
		System.out.println("------a.length="+a.length);
		System.out.println("------b.length="+b.length);
		b = a;//
		System.out.println("------b.length="+b.length);
	}
}

输出:
------a.length=3
------b.length=5
------b.length=3
可以看出数组b的长度有变化,并不是数组b变小了,而是数组引用变量b指向了a数组,输出的其实是a的数组长度
上图:
当我们定义并初始化了数组a时,系统在内存中分配了两个空间,一个用来存放数组的引用变量-栈内存,一个用来存放实际数组值-堆内存,数组b是动态初始化也同理,只是数组值都是默认值0,栈中a、b变量存放的是数组在堆内存中的地址,也就是变量a、b分别指向这两个数组、如下图在这里插入图片描述
当执行 b = a;时,是a把地址值付给了变量b,此时b指向数组a,所以b打印出来的长度是3,数组b失去了引用,变成垃圾,等待垃圾回收机制回收
在这里插入图片描述
Tip:
*当一个方法执行时、会建立自己的内存栈、方法里定义的遍历会逐个放入内存栈里、方法结束、内存栈自然销毁

  • 程序中创建对象时、对象别保存到运行时数据区、也就是堆内存、堆内存中的对象不会随着方法结束被销毁,只有当对象没有任何引用变量引用它时才会别 垃圾回收机制回收*。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值